我是c#的初学者,我在dataGridView1
中创建了一个Form
,我在其中添加了一些行和列(,不使用DataSet
和Datatable
)。现在我需要将dataGridView1
的数据发送到xml文件。每当我点击该按钮时,xml文件应该更新。我需要在不使用Datatable
(或表)的情况下执行此操作。我尝试了以下代码(无法正常工作)
OnButtonClick
XmlTextWriter newXml = new XmlTextWriter("d:/newXML.xml", Encoding.UTF8);
DataSet ds = new DataSet(dataGridView1.Rows.ToString()); /* May be I am missing something here */
ds.WriteXml(newXml);
xml文件已成功创建,但在其中显示<System.Windows.Forms.DataGridViewRowCollection />
。
如果我在BindingSource bs = (BindingSource)dataGridView1.DataSource;
之前添加DataSet
,则会显示错误“对象引用未设置为对象的实例。”
注意:如果xml文件不是他们的,那么应该创建一个。
提前致谢。
答案 0 :(得分:0)
欢迎来到 C#世界!
解决问题的良好开端应该是使用序列化,当您需要将对象保存到XML文件时,这非常方便。
我不知道你如何存储填充 DataGrid 的对象,但如果可以,你应该使它们可序列化,添加一些方法,如Load(),Save()等。< / p>
阅读本文以获取更多信息:MSDN - Serialization
你会发现很多关于如何做到这一点的信息,当你开始的时候实施起来有点苛刻,但是在路上可以节省你很多时间!
希望它会有所帮助。
编辑1:
刚看到你的编辑,好像你没有使用对象,只是简单的插入。在这种情况下,我的解决方案无助于在更复杂的情况下考虑它......
答案 1 :(得分:0)
您可以实例化DataTable
并从dataGridView1
控件填充它:
DataTable table = new DataTable("Customers");
// copy the correct structure from datagridview to the table
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
table.Columns.Add(column.Name, typeof(string));
}
// populate the datatable from datagridview
for (int rowIndex = 0; rowIndex < dataGridView1.Rows.Count; rowIndex++)
{
table.Rows.Add();
for (int columnIndex = 0; columnIndex < dataGridView1.Columns.Count; columnIndex++)
{
table.Rows[rowIndex][columnIndex] = dataGridView1[rowIndex, columnIndex].Value;
}
}
然后继续使用其余代码:
DataSet ds = new DataSet();
ds.Tables.Add(table);
ds.WriteXml("d:/newXML.xml", System.Data.XmlWriteMode.IgnoreSchema);