Конвертировать и использовать DataTable в WPF DataGrid? - PullRequest
11 голосов
/ 08 августа 2011

В обычном приложении WinForm вы можете сделать это:

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

но как это сделать с сеткой данных WPF?

dataTable = dataGridRecords.ItemsSource;

тоже не сработает.

Ответы [ 3 ]

38 голосов
/ 08 августа 2011

В 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)
5 голосов
/ 15 ноября 2011

Вам не нужен метод DataViewAsDataTable.Просто сделайте следующее:

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

2 голосов
/ 23 февраля 2014

попробуйте

    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;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...