按索引获取 DataGrid 行

10

我正在尝试根据索引从我的DataGrid中获取DataGridRow。 我正在使用以下代码:

public DataGridRow GetGridRow(int index)
{
    DataGridRow row = (DataGridRow)DG_Statement.ItemContainerGenerator.ContainerFromIndex(index);
    if (row == null)
    {
        // May be virtualized, bring into view and try again.
        DG_Statement.UpdateLayout();
        DG_Statement.ScrollIntoView(DG_Statement.Items[index]);
        row = (DataGridRow)DG_Statement.ItemContainerGenerator.ContainerFromIndex(index);
    }
    return row;
}

参考链接 - 获取数据网格中的行

不幸的是,它返回了一个DataGridRow的空对象。 如果我检查我的网格的Items[]属性,我可以看到13个项目。

需要建议如何获得数据网格的行,因为我想更改数据网格中前两行和后两行的颜色。

感谢任何帮助!

添加数据网格项目屏幕截图

输入图像说明

重要更新

如果我在数据网格的SelectedIndexChanged事件中调用GetGridRow(),它将无误地工作。

另一方面,如果我在构造页面对象后调用它,它将返回空的行对象。


这个问题已经在 Stack Overflow 上被问过了,链接在这里:http://stackoverflow.com/a/8464756/2458971。 - AR5HAM
我在参考资料中提供了这个链接,并使用该帖子中建议的代码。但是我得到了一个空的Row对象,这就是我卡住的地方。 - Nilesh Barai
听起来在那个时候它还没有被初始化。 - Mike Schwartz
@MikeSchwartz:你能否提供任何解决方案来实现这个吗? - Nilesh Barai
问题在于当网格加载时,还没有选择索引。我不完全确定你的逻辑。你是根据选定的索引更改前2行和后2行的颜色吗? - Mike Schwartz
显示剩余3条评论
2个回答

9

如果代码在后台,则可以获取DataGrid的所选索引。我以datagrid作为示例命名了datagrid。

var rowIndex = dataGrid.SelectedIndex;

var row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(selectedIndex);

精选的项目并不能满足我的需求。我想要改变网格的前两行和后两行的颜色。 - Nilesh Barai

0

请检查您传递的索引是否在范围内。


这正是我在上面发布的代码中所做的。我正在传递索引= 0。网格中的总项目数为13,因此它在范围内。另外,如果行== null,则首先调用UpdateLayout(),然后调用ContainerFromIndex()。我正在使用DataTable视图作为我的itemsource。这会导致任何问题吗? - Nilesh Barai
GetGridRow 的调用发生在哪里?你可能在网格加载完所有数据之前就调用它了。因为这是在一个线程上进行的,所以在调用之后但在检查 grid.Items 计数之前,它可能已经被填充了。 - Leeland Clay
尝试调用以下代码:var row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromItem(dataGrid.Items[index]); 看看它会返回什么。 - Leeland Clay
1
@NileshBarai 我需要帮助时使用的示例位于https://dev59.com/K2035IYBdhLWcg3wNtVw。 - Leeland Clay
非常感谢您提供的良好指针!我参考了这个链接 https://dev59.com/NVvUa4cB1Zd3GeqPqytB 并且我的问题得到了解决 :) - Nilesh Barai
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接