C# 在WPF DataGrid中转换和使用DataTable?

C# 在WPF DataGrid中转换和使用DataTable?,c#,wpf,datagrid,C#,Wpf,Datagrid,在普通WinForm应用程序中,您可以执行以下操作: DataTable dataTable = new DataTable(); dataTable = dataGridRecords.DataSource; 但是如何使用WPF数据网格实现这一点呢 dataTable = dataGridRecords.ItemsSource; 也不起作用。在WPF中,您不会这样做 DataGrid.ItemsSource = DataTable; 相反,你是这样做的 DataGrid.ItemsSo

在普通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)

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

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;

    }
公共静态数据表DataGridtoDataTable(DataGrid dg)
{
dg.选择所有细胞();
dg.ClipboardCopyMode=DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null,dg);
dg.未选择的单元格();
字符串结果=(字符串)剪贴板.GetData(DataFormats.CommaSeparatedValue);
string[]line=result.Split(新字符串[]{“\r\n”,“\n”},StringSplitOptions.None);
字符串[]字段;
字段=行[0]。拆分(新字符[]{',});
int Cols=Fields.GetLength(0);
DataTable dt=新的DataTable();
for(int i=0;i
如果数据中的任何地方都有逗号,则会将其弄乱