如何在 FastObjectListView 中 select 行?

How to select row in FastObjectListView?

在尝试如何在 FastObjectListView(C#,Windows 窗体)中 select 行时,我真的很沮丧。

我在网格中有这个对象的对象和索引,但我不能selected! 我所做的一切 - 将滚动条移动到这一行,但不是 select 它。

方法:

idx = index of row with my object
obj = my object

gvRaces.Items[idx].Selected = true;
gvRaces.SelectObject(obj , true);
gvRaces.SelectedItem = (OLVListItem)gvRaces.Items.Find(obj.Id.ToString(), true).FirstOrDefault(); - 

对于最后一种方法,我有一个问题。方法中的键是什么...Items.Find(key, searchAllSubitems)?

所有这些方法都会更改我的 fastObjectListView 中的属性,但不会在视觉上更改任何项目。

如何select我的行?

简而言之:你做错了。使用 ObjectListView 或任何相关控件时,您一般不会直接接触 Items 集合或 ListViewItems。

你应该阅读教程,尤其是 Mental gear shift and Unlearn you must

Beware of ListViewItems. You never need to add ListViewItems to an ObjectListView. If you find yourself adding things to the Items collection, creating ListViewItems, or adding sub-items to anything, then you need to stop – you are being seduced to the dark side. An ObjectListView does all that work for you. It owns the ListViewItems and will destroy and recreate them as needed. Your job is to tell the ObjectListView what information you want the ListViewItems to contain, and then to give it the list of objects to show.

Resist the temptation to add, edit, remove, or otherwise mess with ListViewItems – it will not work.

您已经有正确答案:

gvRaces.SelectObject(obj , true);

这也可行(而且可能更符合您的要求):

gvRaces.SelectedObject = obj;

Rev1.0 的观点仍然有效——确保 obj 实际上是控件中的一个对象。控件使用 Equals() 来决定两个对象是否相等。

另外,确保 olv.HideSelectionfalse。这是一个非常烦人的 MS 属性,它会在 ListView 没有焦点时关闭选择。它使它看起来好像 SelectObject() 实际上没有工作。