none
Selecionar linha do datagridview e adicionar as informações dela em uma nova linha na ultima posição c# RRS feed

  • Pergunta

  • Boa Noite,

    Estou finalizando meu tcc e preciso de uma ajuda, meu projeto  é de agendamento de consultas, e agora fui obrigada a colocar um botão de cancelar a consulta agendada, não posso excluir-la, então criei a logica de ao selecionar a linha do datagridview e clicar botão cancelar, ele pega os  dados daquela linha acrescenta como uma nova linha no final do datagridview e limpa a linha selecionada. O que conseguir fazer até agora foi selecionar a linha mas não sei como pegar as informações dela em uma nova linha.

    O codigo ta assim:

    //Botão de cancelar consultas
             private void button1_Click(object sender, EventArgs e)
             {
                 if (dataGridView1.SelectedRows.Count > 0)
                 {
                     var row = dataGridView1.SelectedRows[0];
    
                 }
             }
    Alguém pode me ajudar?

    terça-feira, 14 de fevereiro de 2017 22:56

Respostas

  • Você poderia ao invés de mudar a posição na grid criar mais um campo tipo ativo e somente listar as consultas agendadas ativas na grid e quando cancela-se a consulta só atualizaria o status para inativo e recarregava a grid.

    É só uma sugestão, pois se o usuário de repente reoordenar a grid na sua logica atual a consulta cancelada reapareceria no topo novamente


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 15 de fevereiro de 2017 12:25

Todas as Respostas

  • Olá, você pode fazer dessa forma:

    if (dataGridView1.SelectedRows.Count != 0)
    {
        DataGridViewRow row = this.dataGridView1.SelectedRows[0];
        var valor = row.Cells["ColumnName"].Value;
    }


    João Paulo Gomes

    http://blog.johnowl.com/


    • Editado John Owl terça-feira, 14 de fevereiro de 2017 22:59
    terça-feira, 14 de fevereiro de 2017 22:59
  • Olá,

    Não funcionou jovem.

    :(

    terça-feira, 14 de fevereiro de 2017 23:39
  • Qual o erro?

    João Paulo Gomes

    terça-feira, 14 de fevereiro de 2017 23:41
  • Ele apenas seleciona a linha...mas não cria uma nova com as mesmas informações.

    O que eu quero é ele seleciona essa linha e crie uma copia dela na ultima linha do datagridview

    terça-feira, 14 de fevereiro de 2017 23:54
  • Fiz um teste e funcionou, veja se ficou claro:

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // carregando dados de exemplo
                //=============================
                dataGridView1.Rows.Add();
                dataGridView1.Rows.Add();
                dataGridView1.Rows.Add();
                dataGridView1.Rows.Add();
                dataGridView1.Rows[0].SetValues(1, "José da Silva");            
                dataGridView1.Rows[1].SetValues(2, "Maria da Silva");            
                dataGridView1.Rows[2].SetValues(3, "Pedro da Silva");            
                dataGridView1.Rows[3].SetValues(4, "João da Silva");
                
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (dataGridView1.SelectedRows.Count > 0)
                {                
                    var row = dataGridView1.SelectedRows[0];
    
                    int id = Convert.ToInt32(row.Cells[0].Value);
                    string nome = row.Cells[1].Value.ToString();
    
                    dataGridView1.Rows.RemoveAt(row.Index);                
                    dataGridView1.Rows.Add(id, nome);                                
                }
            }
        }


    João Paulo Gomes

    terça-feira, 14 de fevereiro de 2017 23:56
  • Olá,

    Faz assim:

             private void button1_Click(object sender, EventArgs e)
             {
                 if (dataGridView1.SelectedRows.Count > 0)
                 {
                     var row = dataGridView1.SelectedRows[0];
                     dataGridView1.Rows.Add(row); 
                     dataGridView1.Rows.RemoveAt(row.Index);                
                 }
             }


    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    terça-feira, 14 de fevereiro de 2017 23:59
  • Andressa, boa noite.

    Sua aplicação é windowsforms correto?? se sim tenta dessa forma :

                 private void button1_Click(object sender, EventArgs e)
                 {
                     if (dataGridView1.SelectedRows.Count > 0)
                     {
                         var row = dataGridView1.CurrentRow.Cells[0].Value.ToString();
                     }
                 }


    Diego Almeida Barreto</strong> <br/> <em>System Analyst / Software Developer</em> <br/> <img </p> </div>

    quarta-feira, 15 de fevereiro de 2017 00:01
  • Olá,

    Está  dando o seguinte erro

    Não é possível adicionar linhas programaticamente à coleção de linhas de DataGridView quando o controle é associado a dados.

    :(

    quarta-feira, 15 de fevereiro de 2017 00:11
  • está dando o seguinte erro:

    A cadeia de caracteres de entrada não estava em um formato incorreto.

    :(

    quarta-feira, 15 de fevereiro de 2017 00:12
  • Qual tipo de dataSource está usando? DataTable?

    João Paulo Gomes

    quarta-feira, 15 de fevereiro de 2017 00:13
  • VOcê pode alterar diretamente os valores do DataTable.

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private DataTable dt;
    
            private void Form1_Load(object sender, EventArgs e)
            {
                dt = new DataTable();
    
                dt.Columns.Add("Id");
                dt.Columns.Add("Nome");
    
                dt.Rows.Add(1, "José da Silva");
                dt.Rows.Add(2, "João da Silva");
                dt.Rows.Add(3, "Maria da Silva");
                dt.Rows.Add(4, "Pedro da Silva");
    
                dataGridView1.DataSource = dt;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (dataGridView1.SelectedRows.Count > 0)
                {                
                    var row = dataGridView1.SelectedRows[0];
                    
                    var dataRow = dt.Rows[row.Index];                
                    
                    dt.Rows.Add(dataRow[0], dataRow[1]);
                    dt.Rows.RemoveAt(row.Index);
                }
            }
        }


    João Paulo Gomes

    quarta-feira, 15 de fevereiro de 2017 00:26
  • sim jovem. 

    conexaoDataSet = new DataSet();
                conexao = new MySqlConnection("SERVER=localhost;DATABASE=teste;UID=root;PASSWORD=;");
    
               try
               {
                    conexao.Open();
                 
    
    
                   string consu = "select a.HR ,b.dataa,b.Cd_Consulta,g.Nome_Paciente, g.Cd_Paciente, c.Nome_Dentista, d.Descricao,p.Descri from horario a left join consultas b on (a.Cd_hr=b.cd_hr and b.Dataa LIKE '%" + monthCalendar1.SelectionRange.Start.Date.ToString("yyyy-MM-dd") + "%' and b.cro  LIKE '%" + comboBox2.SelectedValue + "%') left join paciente g on g.cd_paciente=b.Cd_Paciente left join dentista c on c.CRO=b.cro left join procedimentos d on d.cd_procedimento=b.cd_procedimento left join pagamento p on p.Cd_Pagamento=b.cd_pagamento order by a.Cd_hr";
                     
                     MySqlDataAdapter conexaoAdapter = new MySqlDataAdapter(consu, conexao);
                      conexaoAdapter.Fill(conexaoDataSet, "consultas");
                      dataGridView1.DataSource = conexaoDataSet.Tables["consultas"];
    
                      //exibiçao datagrid 
                      dataGridView1.Columns["HR"].HeaderText = "Horarios";
                      dataGridView1.Columns["Cd_Consulta"].HeaderText = "Consulta";
                      dataGridView1.Columns["Dataa"].HeaderText = "Data";
                      dataGridView1.Columns["Nome_Paciente"].HeaderText = "Nome Paciente";
                      dataGridView1.Columns["Cd_Paciente"].HeaderText = "Codigo Paciente";
                      dataGridView1.Columns["Nome_Dentista"].HeaderText = "Nome Dentista";
                      dataGridView1.Columns["Descricao"].HeaderText = "Procedimento";
                      dataGridView1.Columns["Descri"].HeaderText = "Pagamento";
                   
                    conexao.Close();
                    conexao.Dispose();
               }

    • Editado Andressa.s quarta-feira, 15 de fevereiro de 2017 00:42
    quarta-feira, 15 de fevereiro de 2017 00:27
  • Você poderia ao invés de mudar a posição na grid criar mais um campo tipo ativo e somente listar as consultas agendadas ativas na grid e quando cancela-se a consulta só atualizaria o status para inativo e recarregava a grid.

    É só uma sugestão, pois se o usuário de repente reoordenar a grid na sua logica atual a consulta cancelada reapareceria no topo novamente


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 15 de fevereiro de 2017 12:25
  • Entendi, vou tentar fazer dessa forma também...

    Obrigada!

    quarta-feira, 15 de fevereiro de 2017 23:10