diogom Posted July 10, 2013 at 01:53 PM Report #518064 Posted July 10, 2013 at 01:53 PM (edited) Olá, Estou a fazer um calendario de eventos. Tenho tudo feito, mas quando carrego a pagina pela primeira x, só aparece o ultimo evento gravado. Quero que apareçam todos os eventos da bd para o calendario. public class Evento { public string Nome { get; set; } public string Descricao { get; set; } public DateTime DataDoEvento { get; set; } } public partial class calendario : System.Web.UI.Page { string NomeBD; string DescricaoBD; string DataDoEventoBD; private const string listaDeEventosKey = "_listaDeEventosKey"; LiteralControl controlLiterial; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { retirarBD(); string evento = NomeBD; string descricao = DescricaoBD; DateTime dataEvento = DateTime.Parse(DataDoEventoBD); AdicionarEvento(evento, descricao, dataEvento); } } protected void Button2_Click(object sender, EventArgs e) { adicionarBD(); retirarBD(); string evento = NomeBD; string descricao = DescricaoBD; DateTime dataEvento = DateTime.Parse(DataDoEventoBD); AdicionarEvento(evento, descricao, dataEvento); } private void AdicionarEvento(string evento, string desc, DateTime dataDoEvento) { List<Evento> listEventos; if (Session[listaDeEventosKey] == null) { listEventos = new List<Evento>(); listEventos.Add(new Evento() { Nome = evento, Descricao = desc, DataDoEvento = dataDoEvento }); Session[listaDeEventosKey] = listEventos; } else { listEventos = (Session[listaDeEventosKey] as List<Evento>); listEventos.Add(new Evento() { Nome = evento, Descricao = desc, DataDoEvento = dataDoEvento }); Session[listaDeEventosKey] = listEventos; } } protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { if (Session[listaDeEventosKey] != null) { List<Evento> listEventos = (Session[listaDeEventosKey] as List<Evento>); string dia = e.Day.Date.ToShortDateString(); e.Cell.Text = e.Day.Date.Day + "<br>"; //quebrar a linha controlLiterial = new LiteralControl(); controlLiterial.Text = e.Day.Date.Day + "<br>"; e.Cell.Controls.Add(controlLiterial); foreach (Evento evento in listEventos) { //verifica se a data do evento é o mesmo dia do calendário if (dia == evento.DataDoEvento.ToShortDateString()) { Label lblEventos = new Label(); lblEventos.Text = "-" + evento.Nome + "<br>"; e.Cell.ForeColor = System.Drawing.Color.FromName("#e72582"); e.Cell.Controls.Add(lblEventos); } } } } public void adicionarBD() { /* É aconselhável criar um utilizador com password. Para acrescentar a password é somente necessário acrescentar o seguinte código a seguir ao uid=root;password=xxxxx*/ string dtevento = Convert.ToDateTime(txtData.Text).ToString("yyyy/MM/dd"); mConn = new MySqlConnection("Database=" + BANCO + ";Data Source=" + SERVIDOR + ";User Id=" + USUARIO + ";Password=" + SENHA + "; pooling=false"); try { // Abre a conexão mConn.Open(); //Query SQL MySqlCommand command = new MySqlCommand("INSERT INTO calend (nmevento,descevento,dtevento)" + "VALUES('" + txtEvento.Text + "','" + txtDescricao.Text + "','" + dtevento + "')", mConn); int resultado = 0; resultado = command.ExecuteNonQuery(); if (resultado >= 1) { //Mensagem de Sucesso //MessageBox.Show("Gravado com Sucesso!"); ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('Gravado com Sucesso!');", true); } else { // MessageBox.Show("Ocorreu um problema ao Gravar. Tente Novamente!!"); ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('Ocorreu um problema ao Gravar. Tente Novamente!');", true); } } catch (MySqlException msqle) { // MessageBox.Show("Erro de acesso ao MySQL: " + msqle.Message + "Erro"); ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('Erro de acesso ao MySQL: " + msqle.Message + "Erro');", true); } catch (Exception ex) { //MessageBox.Show("Erro inesperado: " + ex.Message + "Erro"); ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('Erro inesperado: " + ex.Message + "Erro');", true); } finally { //Encerramento dos Objetos mConn.Close(); } } public void retirarBD() { MySqlConnection conDatabase = new MySqlConnection("Database=" + BANCO + ";Data Source=" + SERVIDOR + ";User Id=" + USUARIO + ";Password=" + SENHA + "; pooling=false"); conDatabase.Open(); MySqlDataReader leitura; MySqlCommand command = conDatabase.CreateCommand(); command.CommandText = "SELECT nmevento,descevento,dtevento FROM calend"; leitura = command.ExecuteReader(); try { while (leitura.Read()) { while (leitura.Read()) { while (leitura.Read()) { NomeBD = leitura.GetString(0); } DescricaoBD = leitura.GetString(1); } DataDoEventoBD = leitura.GetString(2); string ss = DataDoEventoBD; DateTime tt = Convert.ToDateTime(ss); DataDoEventoBD = tt.ToShortDateString(); } } catch (MySqlException msqle) { // MessageBox.Show("Erro de acesso ao MySQL: " + msqle.Message + "Erro"); ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('Erro de acesso ao MySQL: " + msqle.Message + "Erro');", true); } catch (Exception ex) { //MessageBox.Show("Erro inesperado: " + ex.Message + "Erro"); ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('Erro inesperado: " + ex.Message + "Erro');", true); } finally { conDatabase.Close(); leitura.Close(); } } } Edited September 25, 2013 at 08:12 AM by apocsantos
nelsonr Posted July 10, 2013 at 05:58 PM Report #518119 Posted July 10, 2013 at 05:58 PM Mas para que é isto? while (leitura.Read()) { while (leitura.Read()) { while (leitura.Read())
diogom Posted July 10, 2013 at 07:14 PM Author Report #518131 Posted July 10, 2013 at 07:14 PM Mas para que é isto? while (leitura.Read()) { while (leitura.Read()) { while (leitura.Read()) Como devia ficar?
nelsonr Posted July 10, 2013 at 07:28 PM Report #518135 Posted July 10, 2013 at 07:28 PM É que cada vez que fazes um .Read(), avança para o próximo registo. E porque nao lês directamente da base de dados para a lista de eventos. Algo deste tipo while (leitura.Read()) { AdicionarEvento(leitura.GetString(0), leitura.GetString(1), leitura.GetDateTime(2)); }
diogom Posted July 11, 2013 at 11:19 AM Author Report #518284 Posted July 11, 2013 at 11:19 AM É que cada vez que fazes um .Read(), avança para o próximo registo. E porque nao lês directamente da base de dados para a lista de eventos. Algo deste tipo while (leitura.Read()) { AdicionarEvento(leitura.GetString(0), leitura.GetString(1), leitura.GetDateTime(2)); } Ficou a funcionar como queria. Agora existe outro problema. Quando faço refresh À página, o calendario e preenchido de novo com a mm informação.
nelsonr Posted July 12, 2013 at 07:57 PM Report #518591 Posted July 12, 2013 at 07:57 PM Quando faço refresh À página, o calendario e preenchido de novo com a mm informação. Pelo que vi por alto, parece que quando estás a adicionar à base de dados, não estás a atualizar na lista que está na sessão.
diogom Posted July 13, 2013 at 11:10 AM Author Report #518626 Posted July 13, 2013 at 11:10 AM (edited) Pelo que vi por alto, parece que quando estás a adicionar à base de dados, não estás a atualizar na lista que está na sessão. Sim. Estou a adicionar directamente À bd. Depois vou buscar os dados À bd para carregar para o calendario. Edited July 13, 2013 at 11:17 AM by diogom
brunobola Posted September 25, 2013 at 12:10 AM Report #525821 Posted September 25, 2013 at 12:10 AM Pondera utilizar componentes específicos que te fazem um tratamento dos dados e poupas imenso tempo, por exemplo tens aqui um tutorial: http://blog.scheduler-net.com/post/2012/10/29/5-Steps-to-a-Simple-Scheduler-in-ASPNET-MVC3MVC4.aspx
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now