【发布时间】:2018-04-19 17:27:40
【问题描述】:
我正在尝试制作一个 XML 文件来保存项目数据。输入来自 1 个 DGV 的数据是可行的,但是当我尝试将另一个表添加到数据集中时,第一个表会被覆盖,而我得到的只是 XML 文件中第二个 DGV 的表列标题。所以我想知道如何在一个 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
【问题讨论】:
-
发布的代码实在太多了。您确实需要将其范围缩小到相关的内容。你应该read this
-
您的主要问题是,在
CreateDatasetTable中,您每次调用它时都会创建一个新数据集,然后返回它,每次都会覆盖您的数据集。您应该只管理SaveData实例中的数据表,摆脱本地的dataset1变量。
标签: xml vb.net datagridview dataset