2009-06-13 3 views
0

Exemplaire exact de How would you only draw certain ListView Items while in Virtual Mode? du même nom, compte différent.C#: Comment faites-vous pour que vous puissiez décider quels éléments vous voulez spécifiquement dessiner dans une liste en mode virtuel?

@Jonathan: veuillez enrichir votre question au lieu d'entrer une nouvelle copie. J'essaie d'implémenter un mécanisme de filtre dans un objet listview (en mode virtuel). J'ai reçu des conseils pour ne pas retourner les éléments en question dans l'événement retrieve_item que je ne veux pas afficher, mais quand je ne retourne rien de moins qu'un élément listview (mis en cache à partir d'un tableau listview contenant tous mes éléments listview en question) obtenir une erreur d'exception disant que je dois retourner un ListViewItem valide dans l'événement RetrieveVirtualItem comme il lit dans le msdn il fera.

Source: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.retrievevirtualitem.aspx

Alors, comment puis-je aller sur seulement décider comme articles [0], [5] et [11] à afficher sur une liste de disons listviewitems [25] quand je l'appelle une de mes propres méthodes pour qu'il le fasse? Une fois que ma tâche est terminée avec ce que je veux que le filtre soit utilisé, je veux revenir à tous les éléments d'origine dans la liste, comment pourrais-je venir pour implémenter une fonctionnalité comme celle-ci?

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

Répondre

0

Vous devez faire ceci:

  • Construire un tableau, filteredItems, des indices des éléments que vous souhaitez afficher. Cela ressemblera à [0, 5, 11] dans votre exemple
  • Dites le contrôle de montrer 3 articles: resultsList.VirtualListSize = filteredItems.Count;
  • En RetrieveVirtualItem, retournez l'élément de votre tableau:

    return lviCache[filteredItems[ev.ItemIndex]];

Questions connexes