在WPF DataGrid中转换并使用DataTable?

在正常的WinForm应用程序中,您可以这样做:

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

但是如何使用WPF数据网格呢?

 dataTable = dataGridRecords.ItemsSource; 

也不会工作。

在WPF中,你不这样做

 DataGrid.ItemsSource = DataTable; 

相反,你做

  DataGrid.ItemsSource = DataTable.AsDataView(); 

为了获得DataTable,你可以做这样的事情

 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) 

您不需要DataViewAsDataTable方法。 只需执行以下操作:

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

试试这个

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