这是我保存文件的按钮:
private void metroButton12_Click(object sender, EventArgs e) // save { DataSet ds = (DataSet)dataGridView1.DataSource; SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "XML|*.xml"; if (sfd.ShowDialog() == DialogResult.OK) { try { ds.Tables[0].WriteXml(sfd.FileName); } catch (Exception ex) { Console.WriteLine(ex); } } }
我试图将我的datagridview安全到XML,但是当我选择文件时,没有任何惊喜。当我启动控制台时,我看到以下消息:System.NullReferenceException:对象引用未设置为对象实例。
我的gridview看起来像:ID名称1 Michale 2 Noob
我在这里错在做什么?..我在网上看到很多东西,但是在stackoverflow和其他论坛上找不到任何解决方案。请新手耐心等待。谢谢!
在我看来,您的问题不在您想像的地方。
当我启动控制台时,我看到以下消息:System.NullReferenceException:对象引用未设置为对象实例。
对我来说,这意味着您在启动应用程序时会收到消息,而不是单击按钮时。如果在单击之前收到错误,则问题出在其他地方,而不是发布的代码段中。这是您当前正在执行的完整且可测试的代码段。
using System; using System.Data; using System.Windows.Forms; namespace DataGridViewToXML_43053387 { public partial class Form1 : Form { //DataSet theDataSet; public Form1() { InitializeComponent(); InsertDgvIntoForm(); ExportDgvToXML(); } private void InsertDgvIntoForm() { //create a data set DataSet ds = new DataSet(); //create a data table for the data set DataTable dt = new DataTable(); //create some columns for the datatable DataColumn dc = new DataColumn("ItemName"); DataColumn dc2 = new DataColumn("ItemValue"); DataColumn dc3 = new DataColumn("Blah"); DataColumn dc4 = new DataColumn("Bleh"); //add the columns to the datatable dt.Columns.Add(dc); dt.Columns.Add(dc2); dt.Columns.Add(dc3); dt.Columns.Add(dc4); //create 5 rows of irrelevant information for (int i = 0; i < 5; i++) { DataRow dr = dt.NewRow(); dr["ItemName"] = "Item" + i + "Name"; dr["ItemValue"] = "Item" + i + "Value"; dr["Blah"] = "Item" + i + "Blah"; dr["Bleh"] = "Item" + i + "Bleh"; dt.Rows.Add(dr); } //add the datatable to the datasource ds.Tables.Add(dt); //just because it looks better on my screen dataGridView1.AutoSize = true; //make this data the datasource of our gridview dataGridView1.DataSource = ds.Tables[0]; } private void ExportDgvToXML() { DataTable dt = (DataTable)dataGridView1.DataSource; SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "XML|*.xml"; if (sfd.ShowDialog() == DialogResult.OK) { try { dt.WriteXml(sfd.FileName); } catch (Exception ex) { Console.WriteLine(ex); } } } } }