wpf datagrid Ienumerable返回null

时间:2013-04-04 10:48:16

标签: c# wpf datagrid ienumerable

使用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。

那我哪里错了?我错过了什么吗?

先谢谢你们的女孩们!

1 个答案:

答案 0 :(得分:2)

当您获取行时,您的DataGrid尚未更新。设置paretogrid.UpdateLayout()后,解决方案就是ItemsSource

请注意,混合数据和UI代码并不是很好。你想要做的事情可能是在XAML中完成的,你不会遇到这个问题。