C# 如何在FastObjectListView中选择行?

C# 如何在FastObjectListView中选择行?,c#,winforms,objectlistview,C#,Winforms,Objectlistview,在尝试如何在FastObjectListView C、Windows窗体中选择行时,我真的失去了信心 我在网格中有此对象的对象和索引,但无法将其选中! 我所做的一切-移动滚动到此行,但不要选择它 方法: idx = index of row with my object obj = my object gvRaces.Items[idx].Selected = true; gvRaces.SelectObject(obj , true); gvRaces.SelectedItem = (OLV

在尝试如何在FastObjectListView C、Windows窗体中选择行时,我真的失去了信心

我在网格中有此对象的对象和索引,但无法将其选中! 我所做的一切-移动滚动到此行,但不要选择它

方法:

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.Findkey,searchAllSubitems

所有这些方法都会更改我的fastObjectListView中的属性,但不会直观地更改任何项


如何选择我的行?

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

您应该阅读教程,尤其是和

小心ListViewItems。您永远不需要将ListViewItems添加到ObjectListView。如果您发现自己正在向Items集合添加内容、创建ListViewItems或向任何内容添加子项,那么您需要停止—您正被引诱到黑暗面。ObjectListView为您完成所有这些工作。它拥有ListViewItems,并将根据需要销毁和重新创建它们。您的工作是告诉ObjectListView您希望ListViewItems包含哪些信息,然后为其提供要显示的对象列表

抵制添加、编辑、删除或以其他方式弄乱ListViewItems的诱惑,因为这样做行不通


你已经有了正确的答案:

gvRaces.SelectObject(obj , true);
这也会起作用,而且可能更符合您的要求:

gvRaces.SelectedObject = obj;
Rev1.0的点仍然有效-确保obj实际上是控件中的对象。控件使用Equals确定两个对象是否相等


另外,请确保olv.HideSelection为false。这是MS提供的一个非常烦人的属性,当ListView没有焦点时,它会关闭选择。它使SelectObject看起来好像没有工作,而实际上却工作了。

如何正确执行?我并没有改变我的收藏,我只是想模仿用户点击列表中的项目!我没有注意到你的种族。SelectObjectobj,真的;之前这可能是正确的方法,但您必须确保obj确实是同一对象,与您要在OLV中选择的对象具有相同的引用。一个常见的错误是从数据库查询填充OLV,然后想从第二个查询中选择一个指定对象的对象。完全正确!隐藏选择是所有问题的根源!