C#:如何使其能够决定要在虚拟模式下将哪些项目专门绘制到listview中?
来自相同名称、不同帐户的完全相同 @乔纳森:请强化你的问题,而不是输入新的副本C#:如何使其能够决定要在虚拟模式下将哪些项目专门绘制到listview中?,c#,.net,listview,C#,.net,Listview,来自相同名称、不同帐户的完全相同 @乔纳森:请强化你的问题,而不是输入新的副本 我试图在listview对象中实现一种过滤机制(在虚拟模式下)。我得到建议,不要在retrieve_item事件中返回我不想显示的有问题的项,但当我不返回任何少于listview项的项时(从包含所有有问题的listview项的listviewitems数组中缓存)我收到一个异常错误,表示我必须在RetrieveVirtualItem事件中返回一个有效的ListViewItem,就像它在msdn中读取一样 资料来源:
我试图在listview对象中实现一种过滤机制(在虚拟模式下)。我得到建议,不要在retrieve_item事件中返回我不想显示的有问题的项,但当我不返回任何少于listview项的项时(从包含所有有问题的listview项的listviewitems数组中缓存)我收到一个异常错误,表示我必须在RetrieveVirtualItem事件中返回一个有效的ListViewItem,就像它在msdn中读取一样 资料来源: 那么,当我调用自己的一个方法时,我如何才能决定只显示类似于[0]、[5]和[11]的项,比如listviewitems[25]的列表 当我的任务完成后,我希望过滤器可以用来做什么,我想把所有的原始项目恢复到listview中,我怎么能实现这样的功能呢
// 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 }
}
您需要这样做:
- 为要显示的项的索引构建一个数组,
。在您的示例中,这将类似于filteredItems
[0,5,11]
- 告诉控件显示3项:
resultsList.VirtualListSize=filteredItems.Count代码>
- 在
中,从数组中返回项目:RetrieveVirtualItem
返回lviCache[filteredItems[ev.ItemIndex]代码>