我正在使用
将某些字段绑定到datagridviewmyDataGridView.datasource = List(of MyCustomObject)
我从不手动触摸索引,但我得到-1索引没有值(所以,出界错误)
当我选择网格中的任何行时,onRowEnter()事件会出现错误。 它甚至没有进入我的任何事件处理我的clic,它之前的错误...
在界面上,在点击之前, 我可以看到没有网格2的行是(currentRow)。 我想这个bug来自那里,但我不知道如何设置currentRow手动或只是避免这个bug ......
之前有人见过这个吗?
编辑 - 我添加了一些代码来测试:
dgvAssDet.CurrentCell = dgvAssDet.Rows(0).Cells(0)
当此分配运行时,currentCell = nothing, 有> 5行和列......
我有同样的错误,在更改旧的currentCell之前它试图检索它, 但在我的情况下,没有,它有bug ...我不知道为什么。
答案 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>
的类型,您将获得索引超出范围的错误。