如何在ObjectListView中正确选择一行?

use*_*248 1 c# winforms objectlistview

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

重新选择代码非常简单:

olvListView.SelectedIndex = i;
Run Code Online (Sandbox Code Playgroud)

这似乎起作用,因为已选中该项目。但是,如果我然后单击向上或向下箭头,则选择将跳至第二行(无论我选择了哪一行),这表明无论i的值是多少,选择实际上都是在第一行设置的。

我在这里做错了什么?

Rev*_*1.0 5

底层的ListView控件区分“选择”和“焦点”。

olvListView.SelectedIndex = i;更改选择但不更改焦点。但是焦点所在的行是键盘输入所涉及的行。

也可以改变焦点

olvListView.SelectedIndex = i;
olvListView.FocusedItem = olvListView.SelectedItems[0];
Run Code Online (Sandbox Code Playgroud)

或致电

olvListView.SelectObject(aModelObject);
Run Code Online (Sandbox Code Playgroud)

第二种解决方案是使用OLV时选择项目的首选方法,但是您说“写了重新加载listview的代码”,因此对原始项目的引用可能有所不同。也许您应该只刷新已更改的项目,而不是重新加载所有内容。这样,您可以保留选择。