VB.net 2010 - 刷新数据集时来自datagridview的IndexOutOfRange

时间:2010-10-06 18:31:48

标签: .net vb.net winforms datagridview

我在表单上有一个datagridview,它绑定到另一个类的数据集中的表。

我使用数据适配器来填充该数据集中的表格,网格显示数据正常。

工作正常。

在我的表单上,我有一个用户可以输入的文本框,它会将参数传递给用于填充此表的storedprocedure。因此,在启动时,文本框中将包含“%”。然后用户可以键入“F%”并获取以“F”开头的所有内容

因此,当该文本框发生更改时,我会启动异步刷新(.BeginInvoke)来进行刷新。该表填充了减少的记录数(我检查ds.table(0).rows.count并且它是正确的)

但是datagridview然后开始抛出datagridview.dataerror事件。 “System.IndexOutofRangeException:Index#没有值”

看起来数据集正确填充并且没有任何问题,但数据网格不喜欢此更新。索引超出范围错误是如此常见,以至于我找不到搜索所需的内容。

提前致谢! :)

3 个答案:

答案 0 :(得分:1)

我不知道您的具体问题的解决方案,但是当所有数据都预先加载时,每次击键都会对数据库造成浪费。

为什么不设置RowFilter of the DataView并跳过数据库调用,而不是每次都重新查询数据库?

答案 1 :(得分:0)

好吧,找到错误。

  • 取出BeginInvoke并同步进行。看看是否能修复它。如果没有,请将其保留,直到您确定没有其他问题为止。

  • @roadie对重置SelectedRow

  • 有好评
  • 有类似的方法来强制执行更新。喜欢

...

   bindingSource.DataSource = null; 
   bindingSource.DataSource = myTable;

答案 2 :(得分:0)

我有类似的问题,因为我想这样做:
dg1.CurrentCell = dg1.Rows(dg1.RowCount - 1).Cells(1)
更改dg1.DataSource后。
当AllowUserToAddRows = True时,使用RowCount似乎很危险 我将其切换为False并且有效。