2009-06-13 7 views
0

同じ名前、別のアカウントのHow would you only draw certain ListView Items while in Virtual Mode?の正確な複製。C#:どの項目を仮想モードでリストビューに具体的に描画するかを決定するにはどうすればいいですか?

@Jonathan:新しいコピーを入力する代わりに質問を強化してください。


フィルタメカニズムを(仮想モードの)リストビューオブジェクトに実装しようとしています。私は表示されたくないretrieve_itemイベントで問題の項目を返さないようにアドバイスを受けましたが、リストビューアイテム(リストビュー項目の配列からキャッシュされたリストビューアイテムをすべて保持しているもの)私はそれが行うmsdnで読み取るようにRetrieveVirtualItemイベントで有効なListViewItemを返さなければならないと言って例外エラーが発生します。

出典:さんはlistviewitemsを言わせてのリストの中から、表示するhttp://msdn.microsoft.com/en-us/library/system.windows.forms.listview.retrievevirtualitem.aspx

は、どのように私は唯一のアイテム[0]のように決定する時に行くことができ、[5]、および[11] [25]私が呼び出すときそれがそうするように私の方法の1つを出す?

フィルタを使用したいことが何であってもタスクが完了したら、すべて元のアイテムをリストビューに戻したいのですが、どうすればこのような機能を実装できますか?

// 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

あなたはこの実行する必要があります。

  • 表示したい項目のインデックスの配列、filteredItemsをビルドします。あなたの配列から項目を返す、RetrieveVirtualItemresultsList.VirtualListSize = filteredItems.Count;
  • return lviCache[filteredItems[ev.ItemIndex]];

をこれが3つの項目を表示するように制御を伝えるあなたの例では [0, 5, 11]
  • のようになります。
  • 関連する問題