如何在 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;
}
我在 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;
}