0

我对 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");
4

2 回答 2

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");

希望这有助于一些..

于 2011-09-04T22:15:02.450 回答
0

// 这行不通,但它与这里需要的类似...

只是改变

 DataRow row = new DataRow();

到:

DataRow row = dt.NewRow();

它会起作用。

于 2014-01-08T13:51:01.853 回答