프로젝트 데이터를 저장하기 위해 XML 파일을 만들려고합니다. 1 DGV에서 데이터를 입력하면 작동하지만 데이터 세트에 다른 테이블을 추가하려고하면 첫 번째 테이블이 덮어 쓰여지고 XML 파일의 두 번째 DGV 테이블 열 머리글 만 가져옵니다. 그래서 하나의 XML 파일에서 여러 DGV의 데이터를 가져 오는 방법을 알고 싶습니다. 또한 동일한 파일에 일부 텍스트 상자 데이터를 추가해야합니다.VB.net 데이터 집합에 여러 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
에 BindingSource에 사용합니다. 관련성이있는 것으로 좁혀 야합니다. 당신은 이것을 읽어야한다. (https://stackoverflow.com/help/mcve) – jmcilhinney
주된 문제는'CreateDatasetTable'에서 당신이 그것을 부를 때마다 새로운 데이터 셋을 생성하고 리턴 할 때마다 매번 데이터 셋을 덮어 쓰는 것이다. . 'SaveData' 인스턴스에서 해당 datatables를 관리하고 로컬'dataset1' 변수를 제거해야합니다. – Crowcoder