1

使用 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}"

第三,我创建了一个 Ienumerable ......

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”语句发现它为假,因此跳过了产量。所以当然,当我在“showarrows”方法中逐步执行foreach循环时,它不会打扰,因为有空值。

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

在此先感谢伙计们!

4

1 回答 1

2

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

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

于 2013-04-04T11:41:37.303 回答