Не только возможно, но и довольно просто. Я собираюсь сделать это с набором данных, содержащим таблицы данных, которые используют сеточные представления для ввода. Dgv использует источники привязки в качестве источника данных, а источник привязки имеет набор данных в качестве источника данных и может быть датирован как источник данных.
Я сериализирую набор данных в столбец varbinary (max) в SQL Server.
(я использую строго типизированные свойства в своем бизнес-объекте, но это должно дать вам представление)
'-- Copy dataset to property
'-- Establish locals
Dim loFormatter As New BinaryFormatter()
Dim loStream As New System.IO.MemoryStream()
'-- Serialize the business object
loFormatter.Serialize(loStream, Me.DsPolicies1)
'-- Return the created stream
Me.PoliciesBO1.Dataset_Bytes = loStream.ToArray()
При перемещении по записи политики свойство десериализуется
If Me.PoliciesBO1.Count > 0 And Me.PoliciesBO1.CurrentRowIndex >= 0 Then
Me.clear_bindingsources()
Dim loformatter As New BinaryFormatter()
Dim lomemorystream As MemoryStream = _
New MemoryStream(Me.PoliciesBO1.Dataset_Bytes, 0, _
Me.PoliciesBO1.Dataset_Bytes.Length, True)
Me.DsPolicies1 = _
CType(loformatter.Deserialize(lomemorystream), dsPolicies)
'-- Rehook datasource
Me.rehook_Bindingsources()
Me.refresh_dgvs()
Последние два подпрограммы просто сбрасывают источник данных bindingsource и datamember для каждой таблицы, а затем обновляют каждый dgv
(я использую их для сбора данных для заполнения форм PDF)
Единственная сложность - помнить, что источник данных должен быть пустым в новой записи и должен быть полностью перезагружен из данных после перемещения указателя «родительской» записи.