2009-05-23 22 views
1

DataGridViewを介してDataTableにデータを追加し、それをシリアル化してDataTableに保存することが可能かどうか、そして基礎となるデータベースを作成する必要はありません。 1つのDataTableは、私が保存しようとしているデータの量には十分であり、データベースは間違いなく過剰です。DataGridViewから入力されたデータでDataTableをシリアライズ

ありがとうございます!

答えて

1

シリアル化についてご質問いただきありがとうございます。

DataTableをDataGridView DataSourceプロパティに割り当てると、フォームにデータを入力すると自動的にDataTableに追加されます。

DataTable内のデータをDBの外で永続化する場合は、DataTable WriteXml()メソッド(およびReadXml()を使用してデータをロードする必要があります)。ご覧のとおり、データはxml形式でシリアル化されています。

+0

合意しましたが、シリアライゼーションは代替ですが、私はWriteXML、おそらくCompressionStreamに行くでしょう。 –

0

可能なだけでなく、かなり簡単です。私はちょうど入力にdatagridviewsを使用するdatatablesを含むデータセットでそれを行っています。 dgvはデータソースとしてbindingsourcesを使用し、バインディングソースにはdatasourceとしてデータセットがあり、datamemberとしてdatatableがあります。

データセットをSQL Serverのvarbinary(max)列にシリアル化します。

(私は私のビジネスオブジェクトに強く型付けされたプロパティを使用しますが、これはあなたのアイデアを与える必要があります)ポリシーのレコードは、プロパティが

 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() 

最後にデシリアライズされるナビゲートされる

'-- 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() 

2つのサブシステムがそれぞれのテーブルのbindingsourceデータソースとdatamemberをリセットした後、各dgvをリフレッシュします。

(私はPDFフォームを記入するためにデータ収集に使用します)

唯一の難しい部分は、新しいレコードでデータソースが空でなければならず、 "親"レコードポインタが移動した後にデータから完全にリロードする必要があるということです。

関連する問題