【问题标题】:C#: data from XML in DataGridView; how do I save edited rows?C#:DataGridView 中来自 XML 的数据;如何保存编辑的行?
【发布时间】:2017-11-14 21:56:09
【问题描述】:

我有一个 XML 文件,其中包含来自客户的简单联系数据。

<ArrayOfCustomer>
<customer>
 <firstname>Joe</firstname>
 <lastname>Glenn</lastname>
 <fullname>Glenn, Joe</fullname>
 <email>joe.glenn@something.com</email>
 <substitude>mary.poppins@something.com</email>
 <language>EN</language>
</customer>
<customer>
 <firstname>Lionel</firstname>
 <lastname>Messi</lastname>
 <fullname>Messi, Lionel</fullname>
 <email>lionel.messi@something.com</email>
 <substitude>ernesto.valverde@something.com</substitude>
 <language>ES</language>
<customer>
<customer>...</customer>
</ArrayOfCustomer>

此数据显示在 Windows 窗体元素内的 DataGridView 中。这是通过反序列化和 BindingSource 完成的。 目前没问题。

现在我希望,每当编辑 DataGridView 中的数据(例如,添加客户或编辑电子邮件地址)时,这些更改都会再次保存到 XML 文件中。

当然,我可以添加一个在所有更改时都会调用的方法。但我有一种感觉,这可以更容易地完成。能否请教一下,如何做到这一点?

此外,我对 DataBinding、DataSource、BindingSource、DataSet 等所有术语以及它们如何相互归属感到非常困惑。谁能帮我解决一下?

您好,谢谢!

【问题讨论】:

    标签: xml datagridview save


    【解决方案1】:

    在不知道如何将 XML 文件读入DataGridView 的情况下,我假设您使用的是XmlReader 并将文件读入DataSet,而DataGridView 使用第一个DataTable在这个DataSet 中作为DataSource。如果是这种情况,那么当用户在网格中编辑或添加新信息时,这些更改将反映在 DataTable 中。

    因此,如果您有来自DataGridViewDataTable 并且此DataTable 属于DataSet,您可以使用DataSet 的.WriteXml 方法,如下所示。这会将DataSet 写入格式正确的 XML 文件。

    读取xml文件并设置dataGridViewDataSource的方法

    DataSet ds = new DataSet();
    
    private void btn_ReadXML_Click(object sender, EventArgs e) {
      try {
        using (XmlReader xmlFileToRead = XmlReader.Create("Customers.xml", new XmlReaderSettings())) {
          ds = new DataSet();
          ds.ReadXml(xmlFileToRead);
          dataGridView1.DataSource = ds.Tables[0];
          xmlFileToRead.Close();
        }
      }
      catch (Exception ex) {
        MessageBox.Show(ex.ToString());
      }
    }
    

    然后是写xml文件的方法。

    private void btn_SaveXML_Click(object sender, EventArgs e) {
      try {
        using (XmlWriter xmlFileToWrite = XmlWriter.Create("Customers.xml", new XmlWriterSettings())) {
          ds.WriteXml(xmlFileToWrite);
          xmlFileToWrite.Close();
        }
      }
      catch (Exception ex) {
        MessageBox.Show(ex.ToString());
      }
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-13
      • 2015-05-25
      • 2016-03-14
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多