我在表单上有一个datagridview,它绑定到另一个类的数据集中的表。
我使用数据适配器来填充该数据集中的表格,网格显示数据正常。
工作正常。
在我的表单上,我有一个用户可以输入的文本框,它会将参数传递给用于填充此表的storedprocedure。因此,在启动时,文本框中将包含“%”。然后用户可以键入“F%”并获取以“F”开头的所有内容
因此,当该文本框发生更改时,我会启动异步刷新(.BeginInvoke)来进行刷新。该表填充了减少的记录数(我检查ds.table(0).rows.count并且它是正确的)
但是datagridview然后开始抛出datagridview.dataerror事件。 “System.IndexOutofRangeException:Index#没有值”
看起来数据集正确填充并且没有任何问题,但数据网格不喜欢此更新。索引超出范围错误是如此常见,以至于我找不到搜索所需的内容。
提前致谢! :)
答案 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并且有效。