dgv1.DataSource=null是因为你并没有给DataSource赋值啊。通常的做法是:
1.先得到你从数据库里提取数据的数据集ds
2.然后给dataGridView的DataSource赋值。dgv1.DataSource=ds.Tables[0];
3.绑定dataGridView.DataBind();
因为你没有进行第二部,所以你反向取值是得不到DataSet的。
不晓得你为什么要把数据直接循环加到dataGridView里。建议可以用循环先建立一个DataTable,然后绑定到dataGridView上。
这样在以后想获得DataSource的数据源就可以直接获得了。
------------------------------------------------------------------
如果你不能改变手动绑定的那段代码,就再次循环dataGridView建立一个DataTable吧。
-------------------------------------------------------------------
那就直接循环dgv1就可以了啊。
DataTable dt=new DataTable();
//设置列表头
foreach (TableCell headerCell in GridView1.HeaderRow.Cells)
{
dt.Columns.Add(headerCell.Text);
}
foreach (GridViewRow item in GridView1.Rows)
{
//因为已经加了表头,所以这里只添加绑定的项
if (item.RowType == DataControlRowType.DataRow)
{
DataRow dr = dt.NewRow();
for (int i = 0; i < dt.Columns.Count;i++ )
{
dr[0] = item.Cells[i].Text;
}
dt.Rows.Add(dr);
}
}
dt.WriteXml("data.xml");
---------------------------------------------------------------------
道理是一样的。就是把你的dataGridView循环出来构建一个DataTable
DataTable dt = new DataTable();
//设置列表头
foreach (DataGridViewColumn headerCell in dataGridView1.Columns)
{
dt.Columns.Add(headerCell.HeaderText);
}
foreach (DataGridViewRow item in dataGridView1.Rows)
{
DataRow dr = dt.NewRow();
for (int i = 0; i < dt.Columns.Count; i++)
{
dr[0] = item.Cells[i].Value.ToString();
}
dt.Rows.Add(dr);
}
dt.WriteXml("data.xml");