我目前正在使用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了。添加其他行不会创建数据表。
有什么建议可以解决这个问题吗?感谢。
答案 0 :(得分:0)
问题在于您将数据集作为XML文件写回磁盘。如果您的一个或两个DataTable为空,那么您将松开该表的架构。幸运的是,Dataset.WriteXml的重载需要另一个参数。
ds.WriteXml(filename, XmlWriteMode.WriteSchema);
这样,如果没有记录,磁盘上的结果文件也总是包含表的模式。
当然,当您阅读它时,您可以使用
获取表格的架构ds.ReadXml(filename, XmlReadMove.ReadSchema);