datagridview with datasource out of bound index

时间:2012-08-06 17:31:16

标签: vb.net datagridview indexoutofboundsexception

我正在使用

将某些字段绑定到datagridview
myDataGridView.datasource = List(of MyCustomObject)

我从不手动触摸索引,但我得到-1索引没有值(所以,出界错误)

当我选择网格中的任何行时,onRowEnter()事件会出现错误。 它甚至没有进入我的任何事件处理我的clic,它之前的错误...

在界面上,在点击之前, 我可以看到没有网格2的行是(currentRow)。 我想这个bug来自那里,但我不知道如何设置currentRow手动或只是避免这个bug ......

之前有人见过这个吗?

编辑 - 我添加了一些代码来测试:

    dgvAssDet.CurrentCell = dgvAssDet.Rows(0).Cells(0)

当此分配运行时,currentCell = nothing, 有> 5行和列......

我有同样的错误,在更改旧的currentCell之前它试图检索它, 但在我的情况下,没有,它有bug ...我不知道为什么。

1 个答案:

答案 0 :(得分:2)

在DGV上使用DataSource时,您应该使用集合System.ComponentModel.BindingList<T>,而不是System.Collections.Generic.List<T>

public class MyObject
{
    public int Field1 { get; set; }
    public MyObject() { }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        DataGridViewTest();
    }

    public void DataGridViewTest() {
        BindingList<MyObject> objects = new BindingList<MyObject>();
        dataGridView1.AutoGenerateColumns = true;
        dataGridView1.DataSource = objects;
        dataGridView1.AllowUserToAddRows = true;
        objects.Add(new MyObject() {
            Field1 = 1
        });

    }
}

如果您的对象列表是List<T>的类型,您将获得索引超出范围的错误。