人造数据集将记录集用于DataGridView



我正在更新一个非常旧的VB6程序,其中包括绑定到旧的第三方网格控制的记录集。RecordSet功能已根深蒂固,以至于无法选择替换它们。因此,我用DataGridView替换了不正常的网格,然后使用DataAdapter和数据集填充它。问题在于,记录集最初是与网格结合的,并使用DGV打破了绑定。

所以这就是我要做的。我有一个通过旧记录集和新DGV传递的函数,并填充了它。我想为DGV的Selection Changed事件创建一个动态处理程序,以更新DGV上的当前位置(Rs.AbolutePosition = DGV.ROW),从而将RS光标更新为DGV中的当前位置,从人造数据绑定。

类似的东西....

AddHandler dgv.SelectionChanged, AddressOf RefreshRecordset
Public Sub RefreshRecordset()
   myRS.AbsolutePosition = dgv.Row
End Sub

虽然有几件事。我必须跟踪是否已经创建了事件处理程序以及此特定DataGridView随附的关联记录集。另外,由于这是一个全局功能,可以更新许多RS的DGV,因此需要有一种方法来跟踪记录集。我在想使用DGV的标签?也许创建所有记录集的字典,然后用DGV的名称查找?

以下是我的原始方法,效果很好。我最终对其进行了完善,并将其放在每个记录集的课堂上。我还对其进行了更新以接受真正的DBGRID。通过将其包装在课堂上,我能够删除字典。在新功能中,我通过网格和记录集传递。从那里,我设置了事件处理程序,以处理网格行更改以及RecordSet Movecterte事件。我不得不使用Movecomplete,因为RecordSetChangeComplete具有错误,并且并不总是正确触发。如果记录计数发生了变化,我只是检查MoveComplete。如果是这样,请刷新网格。最后,我为最终函数中的每个事件添加了一个删除手。

//////原始答案/////////

例如,这样的...(我不敢相信这有效...)

    Public dict as new Dictionary(Of String, ADODB.Recordset)
    Public Sub FillGrid(ByRef dgv as DataGridView, ByRef rs as ADODB.RecordSet)
    '.... Fill the grid with the tableadapter, blah blah.
       If Not dict.ContainsValue(rs) Then
         dict.add(dgv.Name, rs)
         AddHandler dgv.SelectionChanged, AddressOf RefreshRecordset)
         ' To make the event fire correctly, I think
         dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect 
       End if
    End Sub
    Public Sub RefreshRecordset(sender As Object, e As System.EventArgs)
       Dim dgv as DataGridView = Ctype(sender, DataGridView)
       If dict.ContainsKey(dgv.Name) then
          Dim rs as ADODB.Recordset = dict(dgv.Name)
          rs.AbsolutePosition = dgv.CurrentCell.RowIndex
       End if
    End Sub

现在,我需要为记录集创建一个处理程序,以每次更新记录集时刷新DGV。

和顺便说一句,我知道可能还有其他方法可以做到这一点,我绝对希望听到他们的声音!请自由!

谢谢!

最新更新