2

我将一些字段绑定到 datagridview

myDataGridView.datasource = List(of MyCustomObject)

而且我从不手动触摸索引,但我得到 -1 索引没有价值(所以,一个超出范围的错误)

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

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

有人见过这个吗?

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

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

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

而且我遇到了同样的错误,在更改旧的 currentCell 之前,它会尝试检索它,但在我的情况下,没有任何错误,而且它会出错......我不知道为什么。

4

1 回答 1

2

在 DGV 上使用 DataSource 时,应该使用 collection 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>您将获得索引超出范围错误。

于 2012-08-06T18:34:45.240 回答