【问题标题】:Windows Forms: Adding an empty DataTable to a DatasetWindows 窗体:将空 DataTable 添加到数据集
【发布时间】:2015-07-08 05:23:02
【问题描述】:

我目前正在使用 C# 开发一个 Windows 窗体应用程序,并且我有一个 DataGridView,它的数据源是一个 DataTable。 DataGridView 和 DataTable 是从存储在磁盘上的 DataSet 加载的。如果在 DataGridView 中进行了任何更改,则在单击保存按钮时会将它们写入文件。但是,如果所有行都被删除,下次程序运行并且我尝试在 DataGridView 中添加一行时,它不会被写入文件,因为当我加载它时,DataTable 不存在,因为所有行都被删除了.

代码如下:

DataSet ds = new DataSet();
DataTable dt160m = new DataTable("dt160m");
DataTable dt80m = new DataTable("dt80m");

ds.ReadXml(filename);

dt160m = ds.Tables["dt160m"];
dt80m = ds.Tables["dt80m"];

dataGridView160m.DataSource = dt160m;
dataGridView80m.DataSource = dt80m;

现在这很棒。例如,如果我从 dataGridView80m 中删除所有记录,那么当我重新打开它时,DataSet 中不再有名为 dt80m 的 DataTable。添加额外的行不会创建数据表。

有解决此问题的建议吗?谢谢。

【问题讨论】:

  • 您可以创建一个辅助数据集 ds2 并将一个带有单个记录的 XML 文件(可能嵌入到项目资源中)读入其中。删除 Rows[0] 以清除 ds2 DataTable 和 AcceptChanges。然后,合并 2 个数据集: ds.Merge(ds2) ;

标签: c# datagridview datatable


【解决方案1】:

问题在于您将数据集作为 XML 文件写回磁盘。如果您的 DataTable 中的一个或两个为空,则您会丢失该表的架构。幸运的是,Dataset.WriteXml 的重载需要另一个参数。

ds.WriteXml(filename, XmlWriteMode.WriteSchema);

这样,如果没有记录,磁盘上的结果文件也始终包含表的架构。

当然,当你读回它时,你会得到你的表的架构

ds.ReadXml(filename, XmlReadMove.ReadSchema);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2014-12-26
    • 2020-10-19
    • 2023-02-10
    • 1970-01-01
    • 2017-05-21
    • 2012-05-17
    相关资源
    最近更新 更多