2012-11-20 11 views
1

我试图将数据从我的datagridview复制到数据表,所以我可以导出为CSV文件行没有出现在数据表中C#

这里是代码

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; 
    } 

现在看来似乎副本从网格到表格的数据,但是当我返回数据表时,所有列都没有行

+0

'dsptable.Rows.Add(数据行)'不叫? – LukeHennerley

回答

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; 
} 
+0

+1不想自己回答,以为我只是简单地解决了这个问题,而且看起来很愚蠢:P – LukeHennerley

+0

问我问题的不是我,我只是说我为什么给+1: ) – LukeHennerley

+0

糟糕的混淆,无论如何感谢您的慷慨... – Adil

0

上面的答案是正确的,但对于你为什么遇到这个问题有一点解释。有人会认为通过DataTable上的NewRow(),你会添加一个新行到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()); 

这应该说明添加行到一个DataTable更简单:)

相关问题