2012-11-20 12 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更簡單:)

相關問題