Jump to content

Recommended Posts

Posted (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 by apocsantos
Posted

É 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));
}
Posted

É 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.

Posted
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.

Posted (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 by diogom
  • 2 months later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.