精通C#(第6版)学习笔记 22.5.4 序列化DataTable/DataSet对象为XML

DataSet和DataTable都支持WriteXml()和ReadXml()方法,如果要使用ReadXml()方法读回数据,需要将WriteXml()方法的XmlWriteMode参数的值设置为 WriteSchema。

WriteXml(String, XmlWriteMode)
使用指定的文件和 XmlWriteMode 写入 DataTable 的当前数据和架构(可选)。 若要写入架构,请将 mode 参数的值设置为 WriteSchema。

使用一个窗口程序展示读写结果:
在这里插入图片描述
输出的XML文件内容如下:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="XmlDemo" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="XmlDemo">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="id" msdata:AutoIncrement="true" type="xs:int" minOccurs="0" />
                <xs:element name="item" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <XmlDemo>
    <id>0</id>
    <item>item 0</item>
  </XmlDemo>
  <XmlDemo>
    <id>1</id>
    <item>item 1</item>
  </XmlDemo>
  <XmlDemo>
    <id>2</id>
    <item>item 2</item>
  </XmlDemo>
  <XmlDemo>
    <id>3</id>
    <item>item 3</item>
  </XmlDemo>
  <XmlDemo>
    <id>4</id>
    <item>item 4</item>
  </XmlDemo>
  <XmlDemo>
    <id>5</id>
    <item>item 5</item>
  </XmlDemo>
  <XmlDemo>
    <id>6</id>
    <item>item 6</item>
  </XmlDemo>
  <XmlDemo>
    <id>7</id>
    <item>item 7</item>
  </XmlDemo>
  <XmlDemo>
    <id>8</id>
    <item>item 8</item>
  </XmlDemo>
  <XmlDemo>
    <id>9</id>
    <item>item 9</item>
  </XmlDemo>
</NewDataSet>

程序代码如下:

    /// <summary>
    /// 创建并显示DataTable
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void buttonBuildDataTable_Click(object sender, EventArgs e)
    {
        DataTable dt = this.CreateTestTable("XmlDemo");
        this.dataGridView1.DataSource = dt;
    }
  
    /// <summary>
    /// 输出DataTable到xml文件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void buttonWriteXml_Click(object sender, EventArgs e)
    {
        DataTable dt = this.dataGridView1.DataSource as DataTable;
        dt.WriteXml("C:\\temp\\XmlDemo.xml", XmlWriteMode.WriteSchema);
        this.dataGridView1.DataSource = null;
    }

    /// <summary>
    /// 读取XML文件到DataTable,并重新显示
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void buttonReadXml_Click(object sender, EventArgs e)
    {            
        DataTable dt = new DataTable();
        dt.ReadXml("C:\\temp\\XmlDemo.xml");
        this.dataGridView1.DataSource = dt;
    }

    /// <summary>
    /// 构建DataTable示例数据,来源于MSDN
    /// </summary>
    /// <param name="tableName"></param>
    /// <returns></returns>
    private DataTable CreateTestTable(string tableName)
    {
        // Create a test DataTable with two columns and a few rows.
        DataTable table = new DataTable(tableName);
        DataColumn column = new DataColumn("id", typeof(System.Int32));
        column.AutoIncrement = true;
        table.Columns.Add(column);

        column = new DataColumn("item", typeof(System.String));
        table.Columns.Add(column);

        // Add ten rows.
        DataRow row;
        for (int i = 0; i <= 9; i++)
        {
            row = table.NewRow();
            row["item"] = "item " + i;
            table.Rows.Add(row);
        }

        table.AcceptChanges();
        return table;
    }
  • 1
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichaelWang2019

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值