データセット内のVB.net複数DGV

プロジェクトデータを保存するためのXMLファイルを作成しようとしています。 1つのDGVからデータを入力しても問題ありませんが、データセットに別のテーブルを追加しようとすると、最初のテーブルが上書きされ、XMLファイルの2番目のDGVのテーブル列ヘッダーだけが取得されます。 1つのXMLファイルで複数のDGVからデータを取得する方法を知りたいですか。同じファイルにテキストボックスのデータを追加する必要もあります。これは私が現在使用しているコードです:

Public Class Dimensioneringsapp

'data sets voor het opslaan en openen van data
Dim path As String
Dim SaveData As DataSet


   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    SaveData = CreateDatasetTable(Rekenwaardes, "Reken")
    SaveData = CreateDatasetTable(XYinput, "input")

End Sub

  'load
Private Sub OpenProjectToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OpenProjectToolStripMenuItem.Click

    If opendialog.ShowDialog = Windows.Forms.DialogResult.OK Then
        path = opendialog.FileName

        'voer het bestand in de tabellen
        LoadFromXMLfile(path)

    End If


End Sub

'save
Private Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveToolStripMenuItem.Click

        If saveFileDialog1.ShowDialog() = DialogResult.OK Then
            path = saveFileDialog1.FileName

            SaveData.Clear()
            AddDataToDataSet(SaveData, Rekenwaardes, "reken")
            AddDataToDataSet(SaveData, XYinput, "input")
            SaveToXMLFile(path, SaveData)

        End If

End Sub

'Create Data set
Private Function CreateDatasetTable(g As DataGridView, t As String) As DataSet
    Dim dataset1 As New DataSet("SaveData")
    Dim table1 As New DataTable(t)

    'counter
    Dim i As Integer = 0

    Do While i < g.ColumnCount
        table1.Columns.Add(g.Columns(i).HeaderText)

        i = i + 1
    Loop

    dataset1.Tables.Add(table1)

    Return dataset1
End Function

Private Sub AddDataToDataSet(d As DataSet, g As DataGridView, t As String)

    'counter voor doorlopen tabel
    Dim i As Integer = 0
    Dim c As Integer = 0

    Do While i < g.RowCount
        Do While c < g.ColumnCount 
            d.Tables(t).Rows.Add(g(c, i).Value)
            c = c + 1
        Loop
        i = i + 1
        Loop

End Sub


Private Sub SaveToXMLFile(filename As String, d As DataSet)
    'd.WriteXml(filename, XmlWriteMode.WriteSchema)
    Dim ser As XmlSerializer = New XmlSerializer(GetType(DataSet))
    Dim writer As TextWriter = New StreamWriter(filename)
    ser.Serialize(writer, d)
    writer.Close()
End Sub

Private Sub LoadFromXMLfile(filename As String)
    If System.IO.File.Exists(filename) Then
        Dim xmlSerializer As XmlSerializer = New XmlSerializer(SaveData.GetType)
        Dim readStream As FileStream = New FileStream(filename, FileMode.Open)

        Rekenwaardes.Columns.Clear()

        SaveData = CType(xmlSerializer.Deserialize(readStream), DataSet)
        readStream.Close()
        'SaveData.ReadXml(filename, XmlReadMode.ReadSchema)
        Rekenwaardes.DataSource = SaveData.Tables("Reken")              
        XYinput.DataSource = SaveData.Tables("input")


    End If
End Sub
End Class
0
それは投稿するには本当に多すぎるコードです。あなたは本当に関連するものだけにそれを絞り込む必要があります。 こちらを読んでください。
追加された 著者 jmcilhinney,
それは投稿するには本当に多すぎるコードです。あなたは本当に関連するものだけにそれを絞り込む必要があります。 こちらを読んでください。
追加された 著者 jmcilhinney,
それは投稿するには本当に多すぎるコードです。あなたは本当に関連するものだけにそれを絞り込む必要があります。 こちらを読んでください。
追加された 著者 jmcilhinney,
主な問題は、 CreateDatasetTable では、呼び出すたびに新しいデータセットを作成し、それを返すたびにそのデータセットを上書きすることです。 SaveData インスタンスでそのデータテーブルを管理するだけで、ローカルの dataset1 変数を取り除きます。
追加された 著者 Crowcoder,
主な問題は、 CreateDatasetTable では、呼び出すたびに新しいデータセットを作成し、それを返すたびにそのデータセットを上書きすることです。 SaveData インスタンスでそのデータテーブルを管理するだけで、ローカルの dataset1 変数を取り除きます。
追加された 著者 Crowcoder,
主な問題は、 CreateDatasetTable では、呼び出すたびに新しいデータセットを作成し、それを返すたびにそのデータセットを上書きすることです。 SaveData インスタンスでそのデータテーブルを管理するだけで、ローカルの dataset1 変数を取り除きます。
追加された 著者 Crowcoder,
主な問題は、 CreateDatasetTable では、呼び出すたびに新しいデータセットを作成し、それを返すたびにそのデータセットを上書きすることです。 SaveData インスタンスでそのデータテーブルを管理するだけで、ローカルの dataset1 変数を取り除きます。
追加された 著者 Crowcoder,

8 答え

テーブルを定義するためにVisual StudioのDataSetデザイナを使用すると、 "厳密に型指定された" DataSetが作成されます。つまり、DataSetを継承していても、すでにテーブルスキーマが定義されているクラスです。これにより、dataSet.Table( "TableName")の代わりにdataSet.TableNameにアクセスできるという他の利点が得られます。

XMLのフォーマットについてあまり気にしていないのであれば、全体をシリアル化するためにDataSetのReadXmlメソッドとWriteXmlメソッドを使用できます。

それからDataGridViewsのBindingSourceを使用してください。

Dim bs1 As New BindingSource
bs1.DataSource = myDataSet
bs1.DataMember = "Table1"  
dgv1.DataSource = bs1

Dim bs2 As New BindingSource
bs2.DataSource = myDataSet
bs2.DataMember = "Table2"  
dgv2.DataSource = bs2
0
追加された

テーブルを定義するためにVisual StudioのDataSetデザイナを使用すると、 "厳密に型指定された" DataSetが作成されます。つまり、DataSetを継承していても、すでにテーブルスキーマが定義されているクラスです。これにより、dataSet.Table( "TableName")の代わりにdataSet.TableNameにアクセスできるという他の利点が得られます。

XMLのフォーマットについてあまり気にしていないのであれば、全体をシリアル化するためにDataSetのReadXmlメソッドとWriteXmlメソッドを使用できます。

それからDataGridViewsのBindingSourceを使用してください。

Dim bs1 As New BindingSource
bs1.DataSource = myDataSet
bs1.DataMember = "Table1"  
dgv1.DataSource = bs1

Dim bs2 As New BindingSource
bs2.DataSource = myDataSet
bs2.DataMember = "Table2"  
dgv2.DataSource = bs2
0
追加された

テーブルを定義するためにVisual StudioのDataSetデザイナを使用すると、 "厳密に型指定された" DataSetが作成されます。つまり、DataSetを継承していても、すでにテーブルスキーマが定義されているクラスです。これにより、dataSet.Table( "TableName")の代わりにdataSet.TableNameにアクセスできるという他の利点が得られます。

XMLのフォーマットについてあまり気にしていないのであれば、全体をシリアル化するためにDataSetのReadXmlメソッドとWriteXmlメソッドを使用できます。

それからDataGridViewsのBindingSourceを使用してください。

Dim bs1 As New BindingSource
bs1.DataSource = myDataSet
bs1.DataMember = "Table1"  
dgv1.DataSource = bs1

Dim bs2 As New BindingSource
bs2.DataSource = myDataSet
bs2.DataMember = "Table2"  
dgv2.DataSource = bs2
0
追加された

テーブルを定義するためにVisual StudioのDataSetデザイナを使用すると、 "厳密に型指定された" DataSetが作成されます。つまり、DataSetを継承していても、すでにテーブルスキーマが定義されているクラスです。これにより、dataSet.Table( "TableName")の代わりにdataSet.TableNameにアクセスできるという他の利点が得られます。

XMLのフォーマットについてあまり気にしていないのであれば、全体をシリアル化するためにDataSetのReadXmlメソッドとWriteXmlメソッドを使用できます。

それからDataGridViewsのBindingSourceを使用してください。

Dim bs1 As New BindingSource
bs1.DataSource = myDataSet
bs1.DataMember = "Table1"  
dgv1.DataSource = bs1

Dim bs2 As New BindingSource
bs2.DataSource = myDataSet
bs2.DataMember = "Table2"  
dgv2.DataSource = bs2
0
追加された

保存したいデータを表すカスタムオブジェクトを使用します。それで、私はあなたのテキストデータのための文字列プロパティとデータセットの配列(またはリストまたはIEnumerable)を持つ型を作成するでしょう。それからそのオブジェクトを直列化します。私はJSONを使用しますが、直列化の方法はあなた次第です。

Public Class ProjectData

    Public Property Text As String
    Public Property DataSets As New List(Of DataSet)

End Class
0
追加された

保存したいデータを表すカスタムオブジェクトを使用します。それで、私はあなたのテキストデータのための文字列プロパティとデータセットの配列(またはリストまたはIEnumerable)を持つ型を作成するでしょう。それからそのオブジェクトを直列化します。私はJSONを使用しますが、直列化の方法はあなた次第です。

Public Class ProjectData

    Public Property Text As String
    Public Property DataSets As New List(Of DataSet)

End Class
0
追加された

保存したいデータを表すカスタムオブジェクトを使用します。それで、私はあなたのテキストデータのための文字列プロパティとデータセットの配列(またはリストまたはIEnumerable)を持つ型を作成するでしょう。それからそのオブジェクトを直列化します。私はJSONを使用しますが、直列化の方法はあなた次第です。

Public Class ProjectData

    Public Property Text As String
    Public Property DataSets As New List(Of DataSet)

End Class
0
追加された

保存したいデータを表すカスタムオブジェクトを使用します。それで、私はあなたのテキストデータのための文字列プロパティとデータセットの配列(またはリストまたはIEnumerable)を持つ型を作成するでしょう。それからそのオブジェクトを直列化します。私はJSONを使用しますが、直列化の方法はあなた次第です。

Public Class ProjectData

    Public Property Text As String
    Public Property DataSets As New List(Of DataSet)

End Class
0
追加された