2012-08-06 40 views
1

我结合一些领域的一个DataGridView与datagridview的数据源与绑​​定了指数

myDataGridView.datasource = List(of MyCustomObject) 

,我从来没有手动触摸指标,但我得到-1指数没有任何价值(所以,一个彻头彻尾绑定错误)

当我在网格中选择任何行时,onRowEnter()事件发生错误。 它甚至没有输入任何我的事件来处理我的命令,它之前的错误...

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

任何人都见过这个?

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

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

当这种分配运行时,currentCell =没什么, 还有> 5点的行和列...

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

回答

1

当您使用一个DGV数据源,你应该使用收集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>类型,你会得到索引出界失误。

+0

哇,非常感谢! 我永远不会找到:S 奇怪,因为我在其他5张桌子上使用列表(...),这是唯一的一个窃听... – 2012-08-06 18:57:02

+0

不客气。你的其他列表可能是因为A)它们不是自定义对象(即'int','double','string'等等)B)它们是一个自定义对象,但是你在构造函数中设置了所有的字段。我显示的示例没有在构造函数中设置Field1,这就是抛出错误的原因。 – Moop 2012-08-06 19:12:23