将DataView与DataGridView一起使用会断开与BindingNavigator的连接

时间:2012-09-21 19:53:57

标签: vb.net datagridview dataview

使用Datagridview控件和BindingNavigator控件的表单出现问题。 最初我有以下代码:

BS = New BindingSource(DS, dsTable)  ' (earlier code) Dim BS as New BindingSource
BNV1.BindingSource = BS     ' A BindingNavigator
DGV1.DataSource = BS        ' A DataGridView

一切都运行良好但是当我插入一个新行时,它显示在DataGridView列表的末尾,我希望它显示在正确的顺序位置。

我在论坛的某个地方找到了一个建议,建议在Datatable上使用DataView来解决这个问题。我尝试过它,效果很好 - 差不多。 这是新代码:

BS = New BindingSource(DS, dsTable)
DV.Table = DS.Tables(dsTable)       ' (earlier code)  Dim DV as New DataView
DV.Sort = DS.Tables(dsTable).Columns(0).ColumnName
DGV1.DataSource = DV                 < ---- instead of the BindingSource 'BS'
BNV1.BindingSource = BS

新记录显示在正确排序的位置 - 但是 -  当我滚动DataGridView时,BindingNavigator没有改变。它从未反映出正确的记录号  但是当你点击BindingNavigator的moveNext,Previous,Start和End箭头时,它正确地改变了计数。什么都没发生  DataGridView但似乎BindingNavigator正在跟踪幕后的其他内容。我想这是原来的表。

知道如何让BindingNavigator同步到DataView吗?那么DatagridView和BindingNavigator正在查看相同的数据?

(我知道我可以通过每次重新填充DataGridView来解决这个问题,但这似乎是浪费资源。)

附加信息:实际执行插入/添加的代码

Dim NewRow As DataRow = DT.NewRow
modCommonMaint.FillNewRow(NewRow, pnlData, dicFields)
NewRow(CntText + 1) = 0
NewRow(CntText + 2) = NewRow(0).ToString
LastAdd = txtID.Text.ToUpper.Trim
DT.Rows.Add(NewRow)
DGV1.Refresh()
Try
  DA.InsertCommand = cmdA
  DA.UpdateCommand = cmdU
  DA.Update(DS, dsTable)
Catch ex As Exception
  Console.WriteLine("Error" & ex.ToString)
Finally
End Try

这是实际执行INSERT / ADD的代码。在任何一种情况下都不会改变。要改变行为,我所做的就是交换本笔记的前2个代码块中的行。

0 个答案:

没有答案