2011-08-08 65 views
10

在正常的WinForm應用程序,你可以這樣做:在WPF DataGrid中轉換和使用DataTable?

DataTable dataTable = new DataTable(); 
dataTable = dataGridRecords.DataSource; 

但如何做到這一點與WPF數據網格?

dataTable = dataGridRecords.ItemsSource; 

也不起作用。

回答

38

在WPF你不這樣做

DataGrid.ItemsSource = DataTable; 

相反,你做

DataGrid.ItemsSource = DataTable.AsDataView(); 

爲了讓數據表背,你可以做這樣的事情

public static DataTable DataViewAsDataTable(DataView dv) 
{ 
    DataTable dt = dv.Table.Clone(); 
    foreach (DataRowView drv in dv) 
     dt.ImportRow(drv.Row); 
    return dt; 
} 

DataView view = (DataView) dataGrid.ItemsSource; 
DataTable table = DataViewAsDataTable(view) 
5

你不不需要DataViewAsDataTable方法。只要做到以下幾點:

DataTable dt = ((DataView)dataGrid1.ItemsSource).ToTable();

3

試試這個

public static DataTable DataGridtoDataTable(DataGrid dg) 
    { 


     dg.SelectAllCells(); 
     dg.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader; 
     ApplicationCommands.Copy.Execute(null, dg); 
     dg.UnselectAllCells(); 
     String result = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue); 
     string[] Lines = result.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); 
     string[] Fields; 
     Fields = Lines[0].Split(new char[] { ',' }); 
     int Cols = Fields.GetLength(0); 

     DataTable dt = new DataTable(); 
     for (int i = 0; i < Cols; i++) 
      dt.Columns.Add(Fields[i].ToUpper(), typeof(string)); 
     DataRow Row; 
     for (int i = 1; i < Lines.GetLength(0)-1; i++) 
     { 
      Fields = Lines[i].Split(new char[] { ',' }); 
      Row = dt.NewRow(); 
      for (int f = 0; f < Cols; f++) 
      { 
       Row[f] = Fields[f]; 
      } 
      dt.Rows.Add(Row); 
     } 
     return dt; 

    } 
+0

這適用於我的情況...謝謝... –

+1

如果你在你的數據有一個逗號的任何地方這會搞砸了 – AndrewBenjamin