none
Eliminar ou excluir linha apenas do datagridview RRS feed

  • Pergunta

  • Boa noite!

    Tenho uma datagridviewA onde pretendo eliminar linha(s). Consigo enviar a(s) linha(s) escolhida(s) passando de uma datagridviewB para datagridviewA sem problemas.

    Consigo eliminar a(s) linha(s) da datagridviewA através de uma Coluna imagem.

    O que acontece é o seguinte: mesmo eliminando linha(s) da datagridviewA, ao abrir o datagridviewB para adicionar nova(s) linha(s), as linha(s) que tinha(m) sido eliminado(s), voltam a aparecer na datagridviewA novamente.

    estou eliminando a(s) linha(s) na datagridviewA   antes de envia-lo para BD se caso houver engano na escolhas das linhas.

    Podiam ajudar-me nisso por favor?

    Agradeço desde já a vossa atenção e apoio.

    //Codigo para abrir o formulario com a datagridview para escolher a linha a ser seleccionada e a enviar
     private void btnpesq_nome_Click(object sender, EventArgs e)
            {
                frmListaEstomProt frm = new frmListaEstomProt();
                frm.ShowDialog();
                string value = frmListaEstomProt .RecordId;
              
                carregaDados(value);
              
    
            }
    //Codigo para carregar datagridview para escolher a linha a excluir
     private void carregaDados(string value)
            {
                db = new BDconexao.accessBD();
                dataGridView1.DataSource = null;
                dataGridView1.Rows.Clear();
                dataGridView1.Refresh();
    
    
    
                string connectionString = db.getConnectionString();
                string newvalue = value.Substring(0, value.Length - 1);
                //string query = "SELECT * FROM ((SELECT * FROM  protese) UNION (SELECT * FROM tratamento_estomat)) as tb ";
                string query = "SELECT * FROM ((SELECT id, descricao, codigo, preco_clinica, comparticipacao_perc, comparticipacao_max,comparticipacao_inps,comparticipacao_segurado, total_tratamento FROM protese)";
                query += "UNION (SELECT id, descricao, codigo, preco_clinica, comparticipacao_perc, comparticipacao_max, comparticipacao_inps, comparticipacao_segurado, total_tratamento FROM tratamento_estomat) )";
                query += "AS tb ";
                query += "WHERE tb.codigo in (" + newvalue + ") ";
    
    
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    using (MySqlDataAdapter adapter = new MySqlDataAdapter(query, conn))
                    {
                        try
                        {
                           
    
                            DataTable dataTable = new DataTable();
                            adapter.Fill(dataTable);
                            for (int i = 0; i < dataTable.Rows.Count; i++)
                            {
                                dataGridView1.Rows.Add(dataTable.Rows[i][0], dataTable.Rows[i][2], dataTable.Rows[i][1], dataTable.Rows[i][3], dataTable.Rows[i][4], dataTable.Rows[i][5], dataTable.Rows[i][6], dataTable.Rows[i][7], dataTable.Rows[i][8]/*, dataTable.Rows[i][9]*/);
                            }
                            dataGridView1.AllowUserToAddRows = false;
                            dataGridView1.AllowUserToDeleteRows = false;
    
                            /*  DataSet ds = new DataSet();
                                MySqlDataAdapter cmd = new MySqlDataAdapter(query, conn);
                                cmd.Fill(ds);
                                dataGridView1.DataSource = ds.Tables[0];*/
    
                            for (int row = 0; row <= dataGridView1.Rows.Count - 1; row++)
                            {
                                ((DataGridViewImageCell)dataGridView1.Rows[row].Cells[9]).Value = Properties.Resources.eliminar;
                            }
    
                          
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Error" + ex);
                        }
                    }
                }
            }
    //Codigo para apagar a linha seleccionada
    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if (e.ColumnIndex < 0 || e.RowIndex < 0) return; // header clicked
    
                if (e.ColumnIndex == dataGridView1.Columns["Eliminar"].Index /*|| e.ColumnIndex == dataGridView1.Columns["Pagamento"].Index*/)
                {
                    // Your logic here. You can gain access to any cell value via DataGridViewCellEventArgs
                    string address = dataGridView1["Eliminar", e.RowIndex].Value.ToString();
    
                    //Primeiramente verifico se existe alguma linha selecionada e faço a mensagem para o usuário decidir se deseja remover!
                    if (dataGridView1.SelectedRows.Count > 0 && MessageBox.Show("Você realmente deseja excluir a linha selecionada?", "Confirme", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == System.Windows.Forms.DialogResult.Yes)
                    {
    
                        dataGridView1.Rows.Remove(dataGridView1.CurrentRow); // apagar a linha do dataGridView1
                       // dataGridView1.DataSource = null; //Remover a datasource
                        dataGridView1.Refresh(); //Para a grid se actualizar
                     
                    }
    
                    ////MessageBox.Show("Eliminar::" + dataGridView1["codigo", e.RowIndex].Value.ToString());
                    //******
                }
            }



    terça-feira, 21 de março de 2017 21:19

Respostas

  • Bom dia,

    Acredito que se você remover apenas do dataGridView isso vai continuar acontecento.

    É preciso remover do DataSet também.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Flavio dos Reis sexta-feira, 7 de abril de 2017 15:20
    quarta-feira, 22 de março de 2017 13:40
    Moderador
  • Caros alguma ideia sobre como resolver o problema? já tentei vários procedimentos mas sem sucesso.

    Agradecia o vosso apoio.

    • Marcado como Resposta Flavio dos Reis sexta-feira, 7 de abril de 2017 15:20
    sábado, 25 de março de 2017 12:30

Todas as Respostas

  • Bom dia,

    Acredito que se você remover apenas do dataGridView isso vai continuar acontecento.

    É preciso remover do DataSet também.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Flavio dos Reis sexta-feira, 7 de abril de 2017 15:20
    quarta-feira, 22 de março de 2017 13:40
    Moderador
  • Olá !

    Obrigado pela dica, estou usando DataTable, mesmo usando

    dataGridView1.DataSource = null;

    os itens eliminados, continuam a reaparecer se caso for carregado novas linhas, apos excluusao dos mesmos.

    Se pudesses ver onde estou errando no codigo para apagar as linhas e carregar novas linhas agradecia muito.

    Obrigado

     Aqui esta uma sequencia de imagens que mostra o meu problema:

    essa segunda imagem é onde se escolhe as linhas para enviar 

    essa terceira imagem mostra as linhas para eliminar

    por exemplo ao excluir essa linha que por engano foi escolhido anteriormente, desaparece da datagridview, fazendo o processo de seleção para escolher a linha correcta, aparece a nova linha mais a que tinha sido excluída.

    Lembrando que os dados só serão enviados para base de dados quando houver certeza de q as linhas escolhidas sao as correctas

    Como faço para resolver este problema?

    Códigos encontram-se na mensagem anterior.

    Desde já agradeço a vossa atenção. 

    quarta-feira, 22 de março de 2017 17:38
  • Caros alguma ideia sobre como resolver o problema? já tentei vários procedimentos mas sem sucesso.

    Agradecia o vosso apoio.

    • Marcado como Resposta Flavio dos Reis sexta-feira, 7 de abril de 2017 15:20
    sábado, 25 de março de 2017 12:30