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