如何在 ObjectListView 中正确 select 一行?

How do I properly select a row in ObjectListView?

我在 C# 和 .Net 4.0 中使用 ObjectListView。我编写了重新加载列表视图的代码,然后重新选择最后选择的索引。

重选代码很简单:

olvListView.SelectedIndex = i;

这似乎有效,因为该项目已被选中。但是,如果我随后单击向上或向下箭头,选择会跳到第二行(无论我选择了哪一行),这表明选择实际上设置在第一行,无论 i 的值是多少。

我做错了什么?

底层ListView控件区分'selection'和'focus'。

olvListView.SelectedIndex = i; 更改 selection 但不更改焦点。但是焦点行是与键盘输入相关的行。

也可以改变焦点

olvListView.SelectedIndex = i;
olvListView.FocusedItem = olvListView.SelectedItems[0];

或致电

olvListView.SelectObject(aModelObject);

第二种解决方案是使用 OLV 时 select 项目的首选方式,但是你说你 "wrote code that reloads the listview",所以对原始项目的引用可能不同。也许您应该只刷新更改的项目,而不是重新加载所有内容。这样你就可以保留 selection.

例如,如果您的 olv 具有来自“class_z.list”的数据源并且 foreach 只有一个结果。

    foreach(class_z a in class_z.list.Where(x=>x.id==id_value))
            {
                olv.SelectedObject = z;
            }