none
Sobrescrevendo apenas as linhas desejadas no DataGridView RRS feed

  • Pergunta

  • Olá!

    A intenção da aplicação é mostrar todos os horários disponíveis no dia. Caso ali já exista algum agendamento ele será exibido na respectiva linha, caso contrário a linha virá em branco mostrando que aquele horário está disponível.

    Os agendamentos são exibidos no DataGridView de acordo com o dia que eu seleciono no calendário

    Exemplo:


    A imagem acima mostra como ele deverá ficar, porém no momento o datagrid é preenchido da seguinte forma (clinica trabalha das 08:00 as 20:00)

     private void frmAgenda_Load(object sender, EventArgs e)
            {
                string data = agenda.SelectionRange.Start.ToString("dd/MM/yyyy");
                for (int cont = 8; cont <= 19; cont++)
                {
                    string[] row = new string[] { "", "", data, cont.ToString() + ":00", "" };
                    dtgrdAgendamentos.Rows.Add(row);
                    string[] row2 = new string[] { "", "", data, cont.ToString() + ":30", "" };
                    dtgrdAgendamentos.Rows.Add(row2);
                }
    
                string[] row3 = new string[] { "", "", data, "20:00", "" };
                dtgrdAgendamentos.Rows.Add(row3);
            }

    E depois quando seleciono um dia ele carrega as informações do banco MSSQL 2005 assim:

    string dia = agenda.SelectionRange.Start.ToString();
    
                try
                {
                    conexao.Open();
                    adap = new SqlDataAdapter("SELECT paciente_codigo , consulta_nomepaciente , consulta_data, consulta_hora, consulta_valor, consulta_id, consulta_recibo FROM consulta WHERE consulta_data =  CONVERT(DATETIME, '" + dia + "', 103)", conexao);
                    ds = new DataSet();
                    adap.Fill(ds, "Paciente_Agendamentos");
                    dtgrdAgendamentos.DataSource = ds.Tables[0];
                    dtgrdAgendamentos.Columns[5].Visible = false;
                    dtgrdAgendamentos.Columns[6].Visible = false;                
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    conexao.Close();
                }

    Obviamente ele substitui o que havia sido carregado no Load, porém preciso que ele verifique o horário que determinado registro está salvo no BD (coluna consulta_hora), e coloque aquele agendamento na respectiva linha do datagrid. No nosso exemplo foram agendadas e salvas no BD duas consultas no dia 12/05/2014, uma as 8:30 e a outras as 11:00...a aplicação deve colocar esses dois agendamentos em seus respectivos locais no DataGridView, e os disponíveis deixar sem nada, como na imagem de exemplo.

    Agradeço a ajuda porque não faço ideia de como fazer isso. Talvez a forma como esteja no momento nem seja a mais apropriada.

    Obrigado!


    segunda-feira, 12 de maio de 2014 21:20