如何将DataGridView内容复制到Dataset?

时间:2011-09-04 19:19:57

标签: ado.net datagridview datagridviewcolumn

我对ADO.NET并不擅长 所以我使用了以下从Internet获得的代码 但我得到错误“位置0没有行。”@标记的行(*) 即使我可以看到使用断点传递值

        DataSet ds = new DataSet();
        DataTable dt = new DataTable("ProdFromDGV");
        ds.Tables.Add(dt);
        foreach (DataGridViewColumn col in dataGridView1.Columns)
        {
            dt.Columns.Add(col.HeaderText, typeof(string));
        }

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                *dt.Rows[row.Index][cell.ColumnIndex] = cell.Value.ToString();*
            }
        }
        dt.WriteXml("table.xml");

2 个答案:

答案 0 :(得分:0)

您需要首先创建一个DataRow类型并将其添加到DataTable中,然后才能开始分配它。

所以你的代码现在就像:

DataSet ds = new DataSet();
DataTable dt = new DataTable("ProdFromDGV");
ds.Tables.Add(dt);

foreach (DataGridViewColumn col in dataGridView1.Columns)
{
    dt.Columns.Add(col.HeaderText, typeof(string));
}

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    foreach (DataGridViewCell cell in row.Cells)
    {
         // This will not work, but it's something similar to this that you need here...
         DataRow row = new DataRow();
         dt.RowCollecion.Add(row);    

         // Now you can assign to the row....
         dt.Rows[row.Index][cell.ColumnIndex] = cell.Value.ToString();
     }
}

dt.WriteXml("table.xml");

希望这有助于一些......

答案 1 :(得分:0)

//这不起作用,但这里有类似的东西......

只需更改

 DataRow row = new DataRow();

为:

DataRow row = dt.NewRow();

它会起作用。