Jump to content
Sign in to follow this  
diogom

calendario

Recommended Posts

diogom

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

Share this post


Link to post
Share on other sites
nelsonr

Mas para que é isto?

while (leitura.Read())
{
while (leitura.Read())
{
	while (leitura.Read())

Share this post


Link to post
Share on other sites
diogom

Mas para que é isto?

while (leitura.Read())
{
while (leitura.Read())
{
	while (leitura.Read())

Como devia ficar?

Share this post


Link to post
Share on other sites
nelsonr

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

Share this post


Link to post
Share on other sites
diogom

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

Share this post


Link to post
Share on other sites
nelsonr
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.

Share this post


Link to post
Share on other sites
diogom

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

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

×
×
  • 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.