none
como passar dados de um datagridview para outro RRS feed

  • Pergunta

  • eu tenho um form de uma tela de venda de produtos que contém dois datagridview

    no DGV 1 eu pesquiso os produtos, ao dar duplo clique nele ele transfere o produto pelo qual pesquisei para o DGV 2 .

    http://imageshack.us/photo/my-images/43/semttuloax.png/

    e o seguinte erro está acontecendo.

     

    ele está adicionando o 1º produto corretamente, mas quando eu vou adicionar outro produto no caso um segundo produto, ele adiciona na mesma linha , apagando o produto anteriormente adicionado 

    como faço para que ele adicione os produtos corretamente

    quinta-feira, 16 de junho de 2011 22:42

Respostas

  • Faz Desta Forma:

     private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)

            {

                int index = dataGridView2.Rows.Add();

                DataGridViewRow row = this.dataGridView2.Rows[index];

                row.Cells[0].Value =  dataGridView1.Rows[0].Cells[0].Value;

                row.Cells[1].Value = dataGridView1.Rows[0].Cells[1].Value;

     

            }


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 18 de junho de 2011 14:45
    Moderador

Todas as Respostas

  • Thiago,

    Por favor, poste o código que você está usando para preencher o grid de produtos para podermos auxilia-lo nesta questão.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quinta-feira, 16 de junho de 2011 22:57
  •  
     private void dgvPesqProduto_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
      {
       vCodigo = Convert.ToInt16(dgvPesqProduto[0, e.RowIndex].Value);
       vDesc = (string)dgvPesqProduto[1, e.RowIndex].Value;
       vPreco = (double)dgvPesqProduto[2, e.RowIndex].Value;
       dataGridView1[1, e.RowIndex].Value = vCodigo;
       dataGridView1[2, e.RowIndex].Value = vDesc;
       dataGridView1[3, e.RowIndex].Value = vPreco;
       int index = dataGridView1.NewRowIndex;
        
       
    
     
       
      }
    
    dgvpesqProduto = DGV1
    
    datagridview1 = DGV2
    
    <br/>
    

    quinta-feira, 16 de junho de 2011 23:05
  • Thiago,

    Pelo que vi, você está preenchendo o grid "na mão"... não seria o caso de você preencher o grid com os dados vindos do banco?

    Veja um tutorial:

    http://imasters.com.br/artigo/11831/csharp/c_acesso_a_dados_preenchendo_um_datagridview/

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quinta-feira, 16 de junho de 2011 23:23
  • não

    no caixa de texto acima do DGV 1 eu digito o nome do produto, o produto irá aparecer no no DGV1 , dando duplo click no no produto pesquisado ele joga no DGV2

    private void textBox2_TextChanged(object sender, EventArgs e)
        {
          this.conectar();
          if (bdConn.State == ConnectionState.Open)
          {
    
            sql = "SELECT codProduto,descProduto,precoVendaProduto FROM cadastroProduto WHERE descProduto LIKE '" + txtDescricao.Text + "%" + "'";
            da = new MySqlDataAdapter(sql, bdConn);
            
            da.Fill(bdDataSet, "descProduto");
          
            dgvPesqProduto.DataSource = bdDataSet;
            
            dgvPesqProduto.DataMember = "descProduto";
          
    
    
          }


    só que quando tento adicionar um segundo produto ele adiciona na mesma linha

     

    http://imageshack.us/photo/my-images/43/semttuloax.png/

     

     

    o

    quinta-feira, 16 de junho de 2011 23:31
  • Este código que você postou é o que deveria copiar os dados do grid 1 para o 2?

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quinta-feira, 16 de junho de 2011 23:35
  • este é o codigo que copia os dados para o grid 2

     

     

    private void dgvPesqProduto_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
     {
     vCodigo = Convert.ToInt16(dgvPesqProduto[0, e.RowIndex].Value);
     vDesc = (string)dgvPesqProduto[1, e.RowIndex].Value;
     vPreco = (double)dgvPesqProduto[2, e.RowIndex].Value;
     dataGridView1[1, e.RowIndex].Value = vCodigo;
     dataGridView1[2, e.RowIndex].Value = vDesc;
     dataGridView1[3, e.RowIndex].Value = vPreco;
    
     
     }
    


     

     


    • Editado Thiago[TMM] sexta-feira, 17 de junho de 2011 23:53
    quinta-feira, 16 de junho de 2011 23:40
  • voce pode usar um dataset ou datatble que recebe a informacao do dgv1 e quando passar pra o dgv2 cria uma linha nova.

    datatrow row = tabela.newrow;

    row[0] = dgv1.....bla bla 

    row[1]=dgv1.....bla bla

    tabela.rows.add(row)

    dgv2.datasource = tabela.

    resolve o teu problema. http://msdn.microsoft.com/en-us/library/system.data.datatable.newrow.aspx

     

    Tenho de dormir esta muito tarde aqui na Englaterra, amanha. 

    O rogerio vai finalizar


    One word frees us of all the weight and pain of life: that word is love.
    quinta-feira, 16 de junho de 2011 23:41
    Moderador
  • Thiago,

    Este código somente preenche a primeira linha do segundo grid.

    Se você quiser fazer assim mesmo, você teria que adicionar uma nova linha, tipo:

    private void dgvPesqProduto_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
     vCodigo = Convert.ToInt16(dgvPesqProduto[0, e.RowIndex].Value);
     vDesc = (string)dgvPesqProduto[1, e.RowIndex].Value;
     vPreco = (double)dgvPesqProduto[2, e.RowIndex].Value;
    
     // cria uma nova linha...
     DataGridViewRow row = new DataGridViewRow();
     row.Cells[1].Value = vCodigo;
     row.Cells[2].Value = vDesc;
     row.Cells[3].Value = vPreco;
     // adiciona no grid...
     int index = grid.Rows.Add(row); 
    }
    
    

     

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quinta-feira, 16 de junho de 2011 23:44
  • tá dando o seguinte erro nessa parte

     

    row.Cells[1].Value = vCodigo;
    row.Cells[2].Value = vDesc; row.Cells[3].Value = vPreco;

    O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção.

    Nome do parâmetro: index

     

     

     

    OBS: não sei se ajuda ou só complica mas a seguinte linha não faz parte do codigo que tinha postado acima, perdão

     

     int index = dataGridView1.NewRowIndex;

     

     

     





    sexta-feira, 17 de junho de 2011 23:52
  • Faz Desta Forma:

     private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)

            {

                int index = dataGridView2.Rows.Add();

                DataGridViewRow row = this.dataGridView2.Rows[index];

                row.Cells[0].Value =  dataGridView1.Rows[0].Cells[0].Value;

                row.Cells[1].Value = dataGridView1.Rows[0].Cells[1].Value;

     

            }


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 18 de junho de 2011 14:45
    Moderador