将datagridview保存到xml中
问题描述:
我有1个表单,其中button1 draw table at datagridview。 填充单元格后,我需要将数据从datagridview保存到xml通过button2。将datagridview保存到xml中
//save
private void button1_Click(object sender, EventArgs e)
{
try
{
DataSet ds = new DataSet();
ds = (DataSet)(dataGridView1.DataSource);
ds.WriteXml(@"c:\1.xml");
}
catch (Exception ex)
{
MessageBox.Show("Ошибка: " + ex.Message);
}
}
//draw a datagridview
private void button2_Click(object sender, EventArgs e)
{
try
{
int x, y;
x = Convert.ToInt32(textBox1.Text);
y = Convert.ToInt32(textBox2.Text);
double[,] grid;
grid = new double[x, y];
int k = 0;
k = dataGridView1.ColumnCount;
if (k != 0)
for (int i = 0; i < k; i++)
dataGridView1.Columns.RemoveAt(0);
dataGridView1.Columns.Clear();
AddColumns(y, dataGridView1);
AddRows(x, dataGridView1);
dataGridView1.RowHeadersWidth = 22;
}
catch (Exception ex)
{
MessageBox.Show("Ошибка: " + ex.Message);
}
}
,但我收到的错误:
object reference not set to an instantce of an object.
所以,我怎么能保存的datagridview到XML?
答
我希望你的dgv没有一个有效的数据源。有关如何绑定数据源的信息,请参阅here如何使用数据填充dgv?
您可以尝试序列化,但DataGridView不可序列化,您需要遍历您的dgv(datagridview)并将每个项目添加到集合中。最好创建一个结构来重复您的dgv的数据并将其声明为[Serializable()]
。每个字段可以存储为一个字符串,因此只需遍历dgv,在每个项目上调用ToString()
并将其添加到结构的实例中。通过您的DGV像行迭代:
for (int i = 0; i < dgv.Rows.Count; i++)
{
//add each row and item to your structure
}
或者,如果你有一个数据源那么这可能是更直接序列化。
所以现在你有一个可序列化的集合,它充满了你所有的数据。现在,你需要序列化结构,然后将其写入文件,如:
XmlSerializer izer = new XmlSerializer(YourStructure.GetType());
TextWriter WriteFileStream = new StreamWriter(@"c:\1.xml");
izer.Serialize(WriteFileStream, YourStructure);
WriteFileStream.Close();
我希望这可以帮助,系列化上的信息可以发现here。请记住,您可以通过双击设计视图中的按钮来为按钮OnClick事件创建一个处理程序。
你能告诉我们你把数据源设置到datagridview的代码吗? – 2012-03-01 11:13:29
显然没有绑定到datagridview控件的DataSource。你如何使用这个数据网格?有更多的代码会很好.. – 2012-03-01 11:13:45