如何以编程方式选择所有符合条件的DataGrid行

时间:2018-09-11 04:59:08

标签: c# wpf datagrid selection

我想将值和列索引传递给一种方法,该方法将以编程方式选择DataGrid控件中与给定列中的值匹配的行。

我的代码是这样的:

private void HighlightSelections(string selection, int colIndex)
{
    mtoDG.UnselectAll();
    for(int i = 0; i < mtoDG.Items.Count; i++)
    {
        DataGridRow row = mtoDG.ItemContainerGenerator.ContainerFromIndex(i) as DataGridRow;
        if (mtoDG.Columns[colIndex].GetCellContent(row) is TextBlock cellContent && cellContent.Text.Equals(selection))
            {
                object item = mtoDG.Items[i];
                mtoDG.SelectedItems.Add(item);
            }
        }
    }

我发现只有在屏幕上显示整个数据网格时,此方法才有效。如果由于空间限制而有未显示的行,则将引发nullexception错误。

所以我的问题是,即使显示区域中有看不见的行,我也可以更改代码以使其正常工作吗?

3 个答案:

答案 0 :(得分:0)

首先,通过添加\y.y处理((M B) (M B))

(\y.y \y.y)

第二,订阅\y.y事件以刷新ArgumentNullException

row != null

答案 1 :(得分:0)

这里的一个好的解决方案是让DataContext的行具有IsSelected属性,然后应该将其与IsSelected行绑定,之后就可以设置DataContext属性,并且一切都可以了,因为DataContext始终具有有效项。

答案 2 :(得分:0)

我认为您需要首先找出导致ArgumentNullException的原因。禁用DataGrid虚拟化功能可能会有所帮助。