使用C#.NET4.5,MS Visual Studio 2012,WPF。
大家好,这里有一些代码给我null。这段代码是我尝试过的先前解决方案。我没有收到任何错误,但从未测试过,因为今天我发现调试时行没有。
下面是代码:
第一次我把从SQL收集的数据扔到数据表中并把它扔进我的数据网格......
private void LoadPareto(string pg)
{
DataTable tbl = new DataTable();
tbl = mysqlq.SQL_GetPareto(pg);
paretogrid.ItemsSource = tbl.AsDataView();
// InsertColumns();
ShowArrows();
}
第二次设置XAML中的绑定......
<DataGrid Name ="paretogrid" ItemsSource="{Binding}"
3我创造了一个不可数......
public IEnumerable<System.Windows.Controls.DataGridRow> GetDataGridRow(System.Windows.Controls.DataGrid grid)
{
var itemsource = grid.ItemsSource as System.Collections.IEnumerable;
if (null == itemsource) yield return null;
foreach (var item in itemsource)
{
var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; // null?
if (null != row) yield return row;
}
}
然后我用这种方法称呼它......
private void ShowArrows()
{
var rows = GetDataGridRow(paretogrid); // fetching null?
foreach (DataGridRow r in rows)
{
DataRowView rv = (DataRowView)r.Item;
foreach (DataGridColumn column in paretogrid.Columns)
{
if (column.GetCellContent(r) is TextBlock)
{
TextBlock cellcontent = column.GetCellContent(r) as TextBlock;
MessageBox.Show(cellcontent.Text);
}
}
}
}
现在我遇到的问题是在Ienumerbale我看到我的项目源包含12007条记录,这是完美的。然而,当我走过时,我发现......
var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
返回null,我的“if”语句将其视为false,因此跳过yield。 所以当然,当我在“showarrows”方法中逐步执行foreach循环时,它不会打扰,因为它是null。
那我哪里错了?我错过了什么吗?
先谢谢你们的女孩们!
答案 0 :(得分:2)
当您获取行时,您的DataGrid
尚未更新。设置paretogrid.UpdateLayout()
后,解决方案就是ItemsSource
。
请注意,混合数据和UI代码并不是很好。你想要做的事情可能是在XAML中完成的,你不会遇到这个问题。