2017-06-19 47 views
1

什麼是.NET中的等價物來轉換我DataGridDataTableDataGrid.ItemsSource沒有在淨CSHARP定義。轉換數據網格的DataTable

謝謝!

DataTable dt = new DataTable(); 
dt = ((DataView)DataGrid1.ItemsSource).ToTable(); 

編輯

這不是重複的,因爲前面的代碼是爲WPF和我正在尋找一個asp.net mvc csharp答案。

+0

可能重複[如何將DataGrid轉換爲dataTable](https://stackoverflow.com/questions/21827339/how-to-convert-datagrid-to-datatable) – arbitrarystringofletters

+0

@arbitrarystringofletters編號重複帖子的代碼是相同的作爲OP的代碼,因爲他/她提到* DataGrid.ItemsSource沒有定義*所以他/她絕對不會尋找WPF解決方案。 –

回答

1

如果你指的是System.Windows.Forms.DataGridSystem.Web.UI.WebControls.DataGrid,那麼最好的辦法是到Datasource財產轉換爲DataTable

當然Datasource財產必須實際上是一個DataTable底層類型開始。您需要知道存儲在Datasource屬性中的對象的基礎類型。

如果基礎類型的Datasource是一個通用的列表,那麼這個SO後應該有所幫助:How to convert a list into data table

僅供參考 - Windows窗體DataGrid控制,according to Microsoft,已取代了DataGridView

+0

我指的是'System.Web.UI.WebControls.DataGrid' –

+0

@J。Lavoie是看到你的編輯和更新我的答案,添加一個鏈接到轉換列表到數據表 – bnem

+0

我在轉換時出錯,但也許這是因爲存儲的對象的基礎類型是一個類對象! –

1

ItemsSource適用於WPF。使用DataSource,並轉換爲DataTable這樣的:

dt = (DataTable)DataGrid1.DataSource; 

編輯:如果你得到與上面的方法麻煩,可以使用這樣的自定義方法:

private DataTable ToDataTable(DataGridView dataGridView) 
{ 
    var dt = new DataTable(); 
    foreach (DataGridViewColumn dataGridViewColumn in dataGridView.Columns) 
    { 
     if (dataGridViewColumn.Visible) 
     { 
      dt.Columns.Add(); 
     } 
    } 
    var cell = new object[dataGridView.Columns.Count]; 
    foreach (DataGridViewRow dataGridViewRow in dataGridView.Rows) 
    { 
     for (int i = 0; i < dataGridViewRow.Cells.Count; i++) 
     { 
      cell[i] = dataGridViewRow.Cells[i].Value; 
     } 
     dt.Rows.Add(cell); 
    } 
    return dt; 
} 

然後使用方法:

var dataTable = ToDataTable(dataGridView1); 

而且MoreLinq是萬一的好選擇類型是一個列表。檢查這個解決方案要知道如何使用它:https://stackoverflow.com/a/42550827/2946329

+0

我試過了,我得到這個錯誤:無法強制'System.Collections.Generic.List'類型'System.Data.DataTable' –

+0

@ J.Lavoie - 請參閱我的回答 – bnem

+0

@ J.Lavoie好吧。檢查我更新的答案。我提供了另一種方法來實現這一點。 –