gpt4 book ai didi

c# - 在 ObjectListView 中保存和恢复选择

转载 作者:行者123 更新时间:2023-11-30 22:04:40 25 4
gpt4 key购买 nike

谁能告诉我如何在 ObjectListView 中保持选择?

我有一个从数据库接收到的对象列表在我的控制之下。用户选择一个然后点击“刷新”(以便再次从数据库中检索所有项目)。选择是“跳跃”的,但我希望它保持在用户选择的对象上。

我必须通过对象的唯一 ID 比较对象,这样排序或数据库中的新对象不得影响用户选择。

提前致谢。

最佳答案

这是我的解决方案(基于 Barry Guvenkaya 的回答)。我假设

  1. 可以选择多个项目(通过鼠标或键盘)
  2. 对象 ID 不存储在 OLVListItem 的列中,而是存储在对象内部(列可以隐藏,它们的顺序可以不同)。

我的 Refresh() 函数:

PushSelected();
objectListView.SetObjects(...);
PopSelected();

保存和恢复选择:

private List<Guid> selected;   // Keeping the ID's of selected objects

public void PushSelected()
{
// Value of SelectedList can be get using
// objectListView.SelectedObjects

selected.Clear();
foreach (MyObject r in SelectedList)
selected.Add(r.id);
}

public void PopSelected()
{
D.DeselectAll();

if (selected.Count != 0)
for (int i = 0; i < objectListView.Items.Count; i ++)
{
OLVListItem item = (OLVListItem)objectListView.Items[i];
Guid g = ((MyObject)item.RowObject).id;
if (selected.Contains(g))
item.Selected = true;
}
}

当然,这个解决方案也有 O(n) 的复杂度,如果所有项目都被选中,甚至是 O(n*n)。

关于c# - 在 ObjectListView 中保存和恢复选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25038495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com