Inserting data from a datagridview C # into another datagridview giving 2 clicks

0

I'm creating a sales system. On the sales screen I own 2 datagridview Being the 1st (product research) where I receive the data of the research of the product, and the 2nd (selected products) will be filled with the products selected in the first one.

I want the user to double-click on the product line the 2nd datagridview is populated with the selected product, thus creating the list of products that have been chosen by the user.

I made the following code:

 private void dataGridPesquisaProdutos_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        ProdutoColecao produtoColecao = new ProdutoColecao();
        Produto produtoSelecionado = (dataGridPesquisaProdutos.SelectedRows[0].DataBoundItem as Produto);
        produtoColecao.Add(produtoSelecionado);

        dataGridProdutosSelecionado.DataSource = null;
        dataGridProdutosSelecionado.DataSource = produtoColecao;
        dataGridProdutosSelecionado.Update();
        dataGridProdutosSelecionado.Refresh();


    }

But I'm not able to fill the second datagridview with more than one product, it always replaces the last one that was selected.

    
asked by anonymous 02.01.2019 / 17:08

2 answers

1

You can not add more than one product because every time you recall the DoubleClick event of the cell you are creating a new instance of the produtoColecao object.

This way you should be able to:

ProdutoColecao produtoColecao = new ProdutoColecao();

private void dataGridPesquisaProdutos_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    Produto produtoSelecionado = (dataGridPesquisaProdutos.SelectedRows[0].DataBoundItem as Produto);

    if (!produtoColecao.Contains(produtoSelecionado))
        produtoColecao.Add(produtoSelecionado);

    dataGridProdutosSelecionado.DataSource = null;
    dataGridProdutosSelecionado.DataSource = produtoColecao;
    dataGridProdutosSelecionado.Update();
    dataGridProdutosSelecionado.Refresh();
}

It is assumed that the class ProdutoColecao extends from a list.

    
02.01.2019 / 17:18
1

It happens that every time you fall into this method you have a new instance of ProdutoColecao , so you are not persisting the data that it already had.

The solution to the problem is you initialize this object outside of the method and only use it when double clicking:

public class Pagina
{
    ProdutoColecao produtoColecao = new ProdutoColecao();

    private void dataGridPesquisaProdutos_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        Produto produtoSelecionado = (dataGridPesquisaProdutos.SelectedRows[0].DataBoundItem as Produto);
        produtoColecao.Add(produtoSelecionado);

        dataGridProdutosSelecionado.DataSource = produtoColecao;
        dataGridProdutosSelecionado.Update();
        dataGridProdutosSelecionado.Refresh();
    }     
}
    
02.01.2019 / 17:18