Как скопировать все данные из DataGrid и вставить в DataTable? (C # / WPF) - PullRequest
0 голосов
/ 14 июня 2019

DataGrid с использованием DataTable получает динамические данные для отображения.Все изменения, внесенные в данные, происходят в DataGrid (изменение имени столбцов, удаление столбцов, изменение порядка столбцов и т. Д.).Для загрузки преобразованных данных необходимо использовать DataTable ...

Поскольку все изменения произошли в DataGrid, они не изменились в DataTable.Как скопировать все измененные данные из DataGrid и вставить в DataTable?

// For example: Changing column names
DataGridColumn columnHeader = CsvGrid.CurrentColumn;
if (columnHeader != null)
{
    string input = new InputBox(columnHeader.Header.ToString()).ShowDialog();
    if (!string.IsNullOrEmpty(input))
    {
        _csvTable.Columns[columnHeader.Header.ToString()].ColumnName = input;
        columnHeader.Header = input;
        GetChecksBox();
     }
}

Мне нужно что-то вроде этого:

DataTable ... = DataGrid.ItemsSource;

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Решает ли это проблему?

DataTable dt = DataGrid.DataSource as DataTable;
0 голосов
/ 15 июня 2019
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();
        //1st row must be column names; force lower case to ensure matching later on.
        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, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...