Inserting data from a datagridview c# in another datagridview giving 2 clicks

Asked

Viewed 44 times

0

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

I want when the user double-click on the product line the 2nd datagridview is filled with the selected product, thus creating the list of products that were 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();


    }

However I am not able to fill the second datagridview with more than one product, always replaced by the last one that was selected.

2 answers

1

Can’t add more than one product because each time it evokes the event of DoubleClick cell is creating a new instance of the object produtoColecao.

This way you should already get:

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 extend from a list.

1

It turns out that every time you fall into this method you have a new instance of ProdutoColecao, so you’re not persisting the data she already owned.

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

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();
    }     
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.