在没有GetVisualChild <t>的情况下从DataGrid获取单元格值

时间:2018-09-20 16:28:00

标签: c# wpf

此网站上有一个解决方案,该解决方案用于使用绑定集合来获取DataGrid单元格值而无需获取。在该解决方案中,引用了GetVisualChild<T>Get all cells in datagrid

显然,MS以其无穷的智慧决定弃用GetVisualChild<T>,只有GetVisualChild(int)

我知道我们将被引导使用绑定对象,但是有时候,您只需要直接处理网格数据即可。

有人能成功地从DataGrid(WPF)无绑定对象中获取单元格值吗?

1 个答案:

答案 0 :(得分:2)

您遇到的问题是,如果DataGrid未绑定,则您依靠单元格内容来查找值,但是如果某些值在复选框中,而某些值在文本块中,则您没有简单的方法可以做到这一点。

您可以做的是使用DataGrid's ItemContainerGenerator获取行,然后遍历行单元以尝试提取值。

也许您的代码看起来像这样:

foreach (var item in grid.Items)
{
    var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
    if (row == null)
        continue;
    foreach (var column in grid.Columns)
    {
        if (!(column.GetCellContent(row) is TextBlock))
            continue;
        var cell = column.GetCellContent(row) as TextBlock;
        var text = cell?.Text; // this is the cell value
    }
}