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

Posted

技术标签:

【中文标题】如何将 datagridview 行添加到 xml 文件?【英文标题】:How to add datagridview rows to an xml file? 【发布时间】:2012-09-26 10:12:36 【问题描述】:

我是 C# 的初学者,我在 Form 中创建了一个 dataGridView1,我在其中添加了一些行和列(没有使用 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 />

如果我在DataSet 之前添加BindingSource bs = (BindingSource)dataGridView1.DataSource;,则会显示错误“对象引用未设置为对象的实例。”

注意:如果xml文件不是他们的那么它应该创建一个。

提前致谢。

【问题讨论】:

Whats "Not working ?" 你有什么错误吗,也放一个调试点,看看你的表中是否有任何数据 您可以使用DataSet.WriteXML,而不是将数据表写入 XML 文件 您似乎从某个地方复制了部分代码,却不了解它在做什么。 @Mr_Green 但是你怎么知道这些行会达到你的目的呢? 我删除了我的 cmets,因为我非常编辑了我的问题。 【参考方案1】:

您可以实例化 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);

【讨论】:

显示错误:Index was out of range. Must be non-negative and less than the size of the collection. 在不使用 DataTable 的情况下有没有办法做到这一点?【参考方案2】:

欢迎来到 C# 世界!

使用序列化是解决问题的良好开端,当您需要将对象保存到 XML 文件中时,它真的很方便。

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

阅读本文了解更多信息:MSDN - Serialization

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

希望它会有所帮助。

编辑 1:

刚刚看到您的编辑,似乎您没有使用对象,只是简单的插入。在那种情况下,我的解决方案将不得不考虑更复杂的情况......

【讨论】:

以上是关于如何将 datagridview 行添加到 xml 文件?的主要内容,如果未能解决你的问题,请参考以下文章

不能向没有列的 DataGridView 控件添加行.必须首先添加列.

C#如何保留datagridview中的原来数据并将新的数据添加到datagridview中?

如何实现c# winform DataGridView添加一行,添加数据后,保存到数据库?

C#DataGridView控件怎么增加行、列?

将数据添加到已存在组合框列的 dataGridView 行

C#如何将DataGirdView1中勾选中checkbox多行 添加到另一个DatagridView2中急用要用代码。