none
GridView com BindingSource para List<>: ao inserir um item altera todas as linhas (Windows Forms) RRS feed

  • Pergunta

  • EDIT: consegui resolver jogando a instância ItemDeOS item = new ItemDeOS(); para dentro do evento do botão. Agora vou precisar de uma forma pro usuário selecionar uma linha e deletar. 

    Pessoal, estou tendo um problema que de início parecia uma coisa fácil.

    Eu instancio um objeto que tem um List<> junto com o form. depois faço o BindingSource pra esse List<>. Depois aponto o Gridview para o BindingSource. 

    O usuário deve preencher 4 campos (sendo 2 combobox e 2 textbox) e ao clicar no botão, o novo item tem que ir para o List<> e o gridview ser atualizado. O processo todo está funcionando, porém, a cada item inserido, todas as linhas anteriores são modificadas e ficam iguais a este recem-inserido. Exemplo: no primeiro item vc preenche os campos e no campo quantidade coloca 10 , no campo lote coloca ABC e insere. Beleza, ele aparece no grid. Aí voce insere um novo item e coloca quantidade 100 e Lote XYZ. Ele insere o novo item corretamente, mas também muda a linha anterior pra lote XYZ e quantidade 100... Tentei fazer com ResetBindings true e false, ambos dão mesmo problema. Com dv.Refresh() apenas dá exceção. E sem o ResetBindings não atualiza o grid...

    código abaixo:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace OS_LAUDO
    {
        public partial class CriaOS : Form
        {
            int OSID;
            OS os=new OS();
            ItemDeOS item=new ItemDeOS();
            BindingSource bSource = new BindingSource();
            
    
            public CriaOS()
            {
                InitializeComponent();
                bSource.DataSource = this.os.lista; 
                bSource.ResetAllowNew();
                bSource.AllowNew = true;            
                itens_datagrid.DataSource = bSource;
            } 
    
            private void additens_bt_Click(object sender, EventArgs e)
            {
                item.OSID = 1;
                item.ProblemaID =Convert.ToInt32(problema_combo.SelectedValue);
                item.ProdutoID =  Convert.ToInt32(produto_combo.SelectedValue);
                item.ProdutoNome = "x";
                item.ProblemaNome = "z";
                item.Lote = lote_textbox.Text;
                item.qtd = Convert.ToInt32(qtd_textbox.Text);
                os.lista.Add(item);            
                bSource.ResetBindings(false);
            }

    tela pra ilustrar:

    Em tempo: Fazendo dessa forma, as colunas do grid estão puxando alguns IDs que quero ocultar, pois vem direto da List<>. Dá pra ocultar, ou teria que fazer uma outra list intermediária só com os campos que eu quero?

    Grato desde já!

    Anderson 

    EDIT: consegui resolver jogando a instância ItemDeOS item = new ItemDeOS(); para dentro do evento do botão. Agora vou precisar de uma forma pro usuário selecionar uma linha e deletar. 


    quinta-feira, 1 de agosto de 2013 18:14

Respostas

Todas as Respostas