Как программно заполнить dataGrid из DataTable в WPF без использования ItemSource - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть DataTable, заполненный данными с сервера SQL.

Я пытаюсь скопировать DataTable в DataGrid без использования ItemsSource В настоящее время я могу скопировать столбцы, используя цикл.

Private Pages.PageGainLoss gridCreator(DataTable dt)
{
    var DT = dt;
    Pages.PageGainLoss gainLoss = new Pages.PageGainLoss();

    foreach(DataColumn dC in DT.Columns) 
    {
        var col = new DataGridTextColumn();
        col.Header = dC.ColumnName;
        gainLoss.dataGrid.Columns.Add(col);
    }

    foreach(DataRow dR in DT.Rows)
    {
        gainLoss.DataGrid.Items.Add(dR)
    }

    return gainLoss;
}

Но я не могу понять цикл для копирования строк. Он копирует пустые строки в мою сетку данных.

EXTRA: Причина, по которой я использую этот подход, заключается в том, что я использую класс для создания Page, который содержит DataGrid и заполняет DataGrid перед его отображением в рамке на главной странице. Но когда я использую gainLoss.dataGrid.ItemsSource = dt.DefaultValue;, я не могу изменить DataGrid или изменить его свойства, такие как ширина столбца или цвет, потому что он говорит, что столбец не существует.

1 Ответ

0 голосов
/ 07 ноября 2018

Вам необходимо установить свойство Binding для DataGridTextColumn:

foreach (DataColumn dC in DT.Columns)
{
    var col = new DataGridTextColumn();
    col.Header = dC.ColumnName;
    col.Binding = new Binding(dC.ColumnName); //<--
    gainLoss.dataGrid.Columns.Add(col);
}

Вы также должны добавить DataRowViews к DataGrid:

foreach (DataRow dR in DT.Rows)
{
    dataGrid.Items.Add(DT.DefaultView[DT.Rows.IndexOf(dR)]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...