删除记录时,WinForms上的DataGridView抛出异常

时间:2009-05-21 00:49:48

标签: c# winforms data-binding datagridview

我没有用WinForms做过很多,所以我想知道是否有人可以给我一些帮助。我有一个与IList<>绑定的DataGridView。当我从集合中删除所选记录(ILIST<>)时,我得到以下异常:

“System.IndexOutOfRangeException:索引3没有值”

我认为我的绑定也有点蹩脚。所以也许有人可以在这里给我一个指针。

 public Form1()
    {
        InitializeComponent();
        empGrid.DataSource = stub.GetAllEmplyees();
        empGrid.Columns["FirstName"].Visible = true;
        StatusStrip.Text = "Employee Administration";

    }

我想要做的是删除记录,然后刷新DataGridGridView。定义要在列中显示哪些属性的最佳方法是什么?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我这样做,不使用DataSource,因为我必须自定义单元格输出。

// for inserts
foreach (var item in data)
{
    DataGridViewRow newRow = new DataGridViewRow();
    newRow.CreateCells(myDataGridView,
        your,
        data,
        for,
        each,
        cell,
        here);
    myDataGridView.Rows.Add(newRow);
}

    // for updates
    myDataGridView.Rows[rowIndex]
        .SetValues(cell,data,you,wish,to,change,here);

为了删除,我在使用时遇到了没有问题:

myDataGridView.Rows.RemoveAt(rowIndex);

myDataGridView.Refresh();应该可用于刷新。

答案 1 :(得分:0)

考虑使用绑定源(将其从工具箱中拖出并将数据源设置为您需要的类类型:

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    List<MyClass> list = new List<MyClass>();
    private void Form1_Load(object sender, EventArgs e)
    {
        this.bindingSource1.DataSource = typeof(WindowsFormsApplication1.MyClass);

        list.AddRange(new MyClass[] {
            new MyClass { Column1 = "1", Column2 = "1" },
            new MyClass { Column1 = "2", Column2 = "2" }
            });

        bindingSource1.DataSource = list;
        bindingSource1.Add(new MyClass { Column1 = "3", Column2 = "3" });
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //Here you remove rows without taking care of the representation:
        bindingSource1.RemoveAt(0); 
    }
}


class MyClass
{
    public string Column1 { get; set; }
    public string Column2 { get; set; }
}