如何将datagridview行添加到xml文件?

时间:2012-09-26 10:12:36

标签: c# xml winforms c#-4.0 datagridview

我是c#的初学者,我在dataGridView1中创建了一个Form,我在其中添加了一些行和列(,不使用DataSetDatatable )。现在我需要将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文件不是他们的,那么应该创建一个。

提前致谢。

2 个答案:

答案 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);