如何在WPF中以编程方式填充DataTable中的dataGrid而不使用ItemSource

时间:2018-11-06 19:57:11

标签: c# wpf datagrid

我有一个DataTable,其中装有来自SQL Server的数据。

我正在尝试将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;
}

但是我似乎无法弄清楚要复制行的循环。它将空行复制到我的数据网格中。

额外: 之所以使用这种方法,是因为我正在使用一个类来创建一个Page,该类包含一个DataGrid并填充DataGrid,然后将其显示在主页上的框架中。但是当我使用gainLoss.dataGrid.ItemsSource = dt.DefaultValue;时,我无法修改DataGrid或更改其属性(例如列宽或颜色),因为它表示该列不存在。

1 个答案:

答案 0 :(得分:1)

您需要设置Binding的{​​{1}}属性:

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