来自同一名称,不同帐户的How would you only draw certain ListView Items while in Virtual Mode?的完全重复。
@Jonathan:请改进您的问题,而不是输入新的副本。
我正在尝试将过滤机制实现到listview对象中(在虚拟模式下)。我已经得到建议,不要在我不想显示的retrieve_item事件中返回有问题的项目,但是当我没有返回任何少于listview项目的东西时(缓存来自listviewitems的数组,其中包含我所有的listview项目)我得到一个异常错误,说我必须在RetrieveVirtualItem事件中返回一个有效的ListViewItem,就像它读取msdn一样。
来源:http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.retrievevirtualitem.aspx
那么当我调出一个我自己的方法时,我怎么能继续只决定像[0],[5]和[11]这样的项目列表显示列表... [25]它是这样的吗?
在完成我想要使用过滤器的任务之后,我想将所有原始项目还原为列表视图,我怎样才能实现这样的功能?
// Initialized with 25 listviewitem & subitems objects later during the programs runtime.
public ListViewItem[] lviCache;
private void lvListView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
e.Item = lviCache[e.ItemIndex];
}
void UnfilterlvItems()
{
// How would I revert it back so that it draws all original items
// from my listviewitem[] array back to normal to display
// all 25 objects again?
}
void FilterlvItems()
{
// What would I be putting in here so that I can fire off the
// retrievevirtualitem events and only decide which items I want
// display for the time being? {0, 5, 11 }
}
答案 0 :(得分:0)
你需要这样做:
filteredItems
。这在您的示例[0, 5, 11]
resultsList.VirtualListSize = filteredItems.Count;
在RetrieveVirtualItem
中,返回数组中的项目:
return lviCache[filteredItems[ev.ItemIndex]];