【发布时间】:2017-11-02 10:58:08
【问题描述】:
所以我成功地使用 XML 文件从我的 datagridview 保存和加载数据。但是,当我加载文件时,由于我使用的是 .columns.clear,因此我在 datagridview 中丢失了列属性。有人知道如何保留列属性/将属性保存到 XML 文件吗?是否可以在同一个 XML 文件中保存额外的文本框和 datagridview 数据?我的代码如下:
Public Class Dimensioneringsapp
'datasets
Dim DataRekenTab As DataSet
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'save dataset
DataRekenTab = CreateDataset(Rekenwaardes)
Rekenwaardes.DataSource = DataRekenTab.Tables("TestSave")
End Sub
'load
Private Sub OpenProjectToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OpenProjectToolStripMenuItem.Click
LoadFromXMLfile("C:\SaveTest.xml")
End Sub
'save
Private Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveToolStripMenuItem.Click
AddDataSet(DataRekenTab, Rekenwaardes)
SaveToXMLFile("C:\SaveTest.xml", DataRekenTab)
End Sub
Private Function CreateDataset(g As DataGridView) As DataSet
Dim dataset1 As New DataSet("SaveTest")
Dim table1 As New DataTable("SaveTest")
'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 AddDataSet(d As DataSet, g As DataGridView)
'counter voor doorlopen tabel
Dim i As Integer = 0
Do While i < g.RowCount
d.Tables("SaveTest").Rows.Add(g(0, i).Value, g(1, i).Value, g(2, i).Value, g(3, i).Value, g(4, i).Value, g(5, i).Value)
i = i + 1
Loop
End Sub
Private Sub SaveToXMLFile(filename As String, d As DataSet)
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(DataRekenTab.GetType)
Dim readStream As FileStream = New FileStream(filename, FileMode.Open)
Rekenwaardes.Columns.Clear()
DataRekenTab = CType(xmlSerializer.Deserialize(readStream), DataSet)
readStream.Close()
Rekenwaardes.DataSource = DataRekenTab.Tables("SaveTest")
Else
MsgBox("file not found! add data and press save button first.", MsgBoxStyle.Exclamation, "")
End If
End Sub
End class
新代码:
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(DataRekenTab.GetType)
Dim readStream As FileStream = New FileStream(filename, FileMode.Open)
Rekenwaardes.Columns.Clear()
DataRekenTab = CType(xmlSerializer.Deserialize(readStream), DataSet)
readStream.Close()
DataRekenTab.ReadXml(filename, XmlReadMode.ReadSchema)
Rekenwaardes.DataSource = DataRekenTab.Tables("SaveTest")
Else
MsgBox("file not found! add data and press save button first.", MsgBoxStyle.Exclamation, "")
End If
End Sub
【问题讨论】:
-
“列属性”是指网格绑定到的 DataTable 的架构,还是指 DGV 列属性(宽度、列顺序等)?
-
我指的是 DGV 属性,例如列宽和设置,例如不可排序设置
-
您能否将 DGV 的 Columns 属性序列化到您的文件流中?
-
它在 C# 中,但这些概念应该适合您。 Here 我展示了如何通过为这些设置创建一个类并将其序列化为与其他数据相同的方式来保存
ForeColor和BackColor等设置。
标签: xml vb.net datagridview