Сериализация DataTable с данными, введенными из DataGridView - PullRequest
1 голос
/ 23 мая 2009

Мне интересно, возможно ли добавить данные в DataTable через DataGridView и сохранить данные в DataTable, сериализовав его - и все это без необходимости создания базовой базы данных. Одного DataTable достаточно для объема данных, которые я пытаюсь сохранить, и база данных определенно излишня.

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 мая 2009

Не думаю, что понимаю ваш вопрос о сериализации.

Если вы присваиваете DataTable свойству DataGridView DataSource, то при вводе данных в форму они автоматически добавляются в DataTable.

Если вы хотите сохранить данные внутри DataTable вне БД, вам следует использовать метод DataTable WriteXml () (и ReadXml () для загрузки данных). Как видите, данные сериализуются в формате xml.

0 голосов
/ 25 февраля 2010

Не только возможно, но и довольно просто. Я собираюсь сделать это с набором данных, содержащим таблицы данных, которые используют сеточные представления для ввода. 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)

Единственная сложность - помнить, что источник данных должен быть пустым в новой записи и должен быть полностью перезагружен из данных после перемещения указателя «родительской» записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...