如何在不使用ItemSource的情况下从WPF中的DataTable编程填充数据网格



我有一个DataTable,里面装满了来自SQL服务器的数据。

我正在尝试在不使用ItemsSource的情况下将DataTable复制到DataGrid。目前,我可以使用循环复制列。。

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或更改它的属性,如列宽或颜色,因为它表示该列不存在。

您需要设置DataGridTextColumn:的Binding属性

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)]);
}

最新更新