2

我正在尝试将数据从我的 datagridview 复制到数据表,以便我可以导出到 csv 文件

这是代码

public DataTable createdatatablefromdgv()
   {
       DataTable dsptable = new DataTable();

       for (int i = 0; i < dataGridView1.Columns.Count; i++)
       {
           DataColumn dspcolumn = new DataColumn(dataGridView1.Columns[i].HeaderText);
           dsptable.Columns.Add(dspcolumn);
       }
       int noOfColumns = dataGridView1.Columns.Count;
       foreach (DataGridViewRow dgvr in dataGridView1.Rows)
       {
           DataRow dataRow = dsptable.NewRow();

           for (int i = 0; i < noOfColumns; i++)
           {
               dataRow[i] = dgvr.Cells[i].Value.ToString();
           }

       }
       return dsptable;
   }

似乎它将数据从网格复制到表但是当我返回数据表时,所有的列都没有行

4

2 回答 2

5

在将值分配给其列后,您不会将 dataRow 添加到数据表中。

public DataTable createdatatablefromdgv()
{
   DataTable dsptable = new DataTable();

   for (int i = 0; i < dataGridView1.Columns.Count; i++)
   {
       DataColumn dspcolumn = new DataColumn(dataGridView1.Columns[i].HeaderText);
       dsptable.Columns.Add(dspcolumn);
   }
   int noOfColumns = dataGridView1.Columns.Count;
   foreach (DataGridViewRow dgvr in dataGridView1.Rows)
   {
       DataRow dataRow = dsptable.NewRow();

       for (int i = 0; i < noOfColumns; i++)
       {
           dataRow[i] = dgvr.Cells[i].Value.ToString();
       }
       dsptable.Rows.Add(dataRow); //Add this statement to add rows to Data Table

   }
   return dsptable;
}
于 2012-11-20T15:47:12.270 回答
0

上面的答案是正确的,但对您遇到此问题的原因进行了一些解释。有人会认为,通过调用NewRow()DataTable会添加一个新行DataTable,然后就可以访问它了。

实际上做的是给你NewRow一个实例,DataRow然后你可以使用列名作为列标识符(整数)的位置。

这允许你做这样的事情

DataRow dataRow = dsptable.NewRow();
foreach(DataColumn dc in dsptable.Columns)
{
   dataRow[dc.ColumnName] = dgvr.Cells[dc.ColumnName].Value.ToString()
}

或者,您可以调用Rows.Add()which 需要一个对象数组或 a ,因为您正在尝试执行 a DataRow

List<string> rowData = new List<string>();
for (int i = 0; i < noOfColumns; i++)
{
   rowData.Add(dgvr.Cells[i].Value.ToString());
}
dsptable.Rows.Add(rowData.ToArray());

这应该更简单地解释向数据表添加行:)

于 2012-11-20T15:59:22.053 回答