没有出现在DataTable c#中的行

时间:2012-11-20 15:45:06

标签: c#

我正在尝试将数据从我的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;
   }

好像它将数据从网格复制到表中,但当我返回数据表时,所有列都没有行

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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()来获取一个对象数组,或者当你试图做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());

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