我有一个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)]);
}