【问题标题】:Saving column properties to XML将列属性保存到 XML
【发布时间】: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 我展示了如何通过为这些设置创建一个类并将其序列化为与其他数据相同的方式来保存ForeColorBackColor 等设置。

标签: xml vb.net datagridview


【解决方案1】:

用途:

d.WriteXml(filename, XmlWriteMode.WriteSchema)

以便架构将包含在 XML 文件中。并将数据与架构一起加载

d.ReadXml(filename, XmlReadMode.ReadSchema)

【讨论】:

  • 这会保存和恢复数据集。
  • @Fyer-Zero 在您的 SaveToXmlFile 和 LoadFromXmlFile 子目录中
  • 所以我把它们放在我的保存和加载中,我的 dgv 属性没有保存。我把我当前的代码放在问题中。
  • 抱歉,我以为您说您想保存数据表架构。在这种情况下,我认为@OhBeWise 发布的链接适合您。只需将其转换为 VB .Net
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多