1

我是 C# 的初学者,我创建了一个dataGridView1Form其中添加了一些行和列(不使用DataSetandDatatable)。现在我需要将数据发送dataGridView1到 xml 文件。每当我单击该按钮时,xml 文件都应该更新。我需要在不使用Datatable(或表格)的情况下执行此操作。我尝试了下面的代码(不工作

按钮点击

        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 文件不是他们的,那么它应该创建一个。

提前致谢。

4

2 回答 2

0

欢迎来到C#世界!

解决问题的一个好的开始应该是使用Serialization,当您需要将对象保存到 XML 文件中时,它真的很方便。

我不知道您如何存储填充DataGrid的对象,但如果可以,您应该使它们可序列化,添加一些方法,如 Load()、Save() 等。

阅读此内容以获取更多信息:MSDN - 序列化

你会发现很多关于如何做到这一点的信息,当你开始时实施起来有点苛刻,但可以为你节省大量的时间!

希望它会有所帮助。

编辑 1:

刚刚看到你的编辑,好像你没有使用对象,只是简单的插入。在那种情况下,我的解决方案将无助于考虑更复杂的情况......

于 2012-09-26T10:21:52.290 回答
0

您可以实例化 a并从您的控件中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);
于 2012-09-26T10:27:09.783 回答