2016-11-11 103 views
0

我想將所有selectedRows從datagridview導出到DataTable。當單擊(選擇)超過2行時,出現下一個錯誤:導出datagridview選擇行到數據表將不起作用

「在System.Data.dll中發生System.IndexOutOfRangeException類型異常錯誤。」

首先,我想:

DataTable table = new DataTable(); 
      for (int i = 0; i < dataGridView_auswahlen.Rows.Count; i++) { 
       if (dataGridView_auswahlen.Rows[i].Selected) { 
        table.Rows.Add(); 
        for (int j = 0; j < dataGridView_auswahlen.Columns.Count; j++) { 
         table.Rows[i][j] = dataGridView_auswahlen[j, i].Value; 
        } 
       } 
      } 

在那之後,我修改了它在:

DataTable dt = new DataTable(); // create a table for storing selected rows 
      var dtTemp = dataGridView1.DataSource as DataTable; // get the source table object 
      dt = dtTemp.Clone(); // clone the schema of the source table to new table 
      DataTable table = new DataTable(); 
      for (int i = 0; i < dataGridView1.Rows.Count; i++) 
      { 
       if (dataGridView1.Rows[i].Selected) 
       { 
        var row = dt.NewRow(); // create a new row with the schema 
        for (int j = 0; j < dataGridView1.Columns.Count; j++) 
        { 
         row[j] = dataGridView1[j, i].Value; 
        } 
        dt.Rows.Add(row); // add rows to the new table 
       } 
      } 

現在的問題是,我的dataGridView是隻顯示1條結果。我需要在顯示的dataGridView中顯示完整的結果列表,並且只將選定的行列保存到DataTable中。

回答

1

使用這個簡單的代碼:

var dtSource = dataGridView1.DataSource as DataTable; 
var dt = dtSource.Clone(); 

foreach (DataGridViewRow row in dataGridView1.SelectedRows) 
{ 
    dt.ImportRow(dtSource.Rows[row.Index]); 
} 
+0

這救了我一噸的麻煩。 – schizoid04