C#:你如何做到这一点,以便你可以决定你想要哪些项目专门绘制在虚拟模式的列表视图?

时间:2009-06-13 14:56:41

标签: c# .net listview

来自同一名称,不同帐户的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 }
    }

1 个答案:

答案 0 :(得分:0)

你需要这样做:

  • 构建要显示的项目的索引数组filteredItems。这在您的示例
  • 中看起来像[0, 5, 11]
  • 告诉控件显示3项:resultsList.VirtualListSize = filteredItems.Count;
  • RetrieveVirtualItem中,返回数组中的项目:

    return lviCache[filteredItems[ev.ItemIndex]];