[C#]Tag van ListViewItem updaten in VirtualMode

Pagina: 1
Acties:

  • Exterazzo
  • Registratie: Mei 2000
  • Laatst online: 12-02 15:44
Ik heb een ListView welke opereerd in VirtualMode. In de eventhandler RetrieveVirtualItem maak ik een stel ListViewItems aan, en deze hebben in de Tag het ID van hun corresponderende gegevens in de database.

Op het moment dat ik zo'n ListViewItem selecteer wil ik dat er een (zelfgeschreven) klasse wordt aangemaakt met de gegevens van dat ID in de Tag. Vervolgens moet de Tag veranderen in die aangemaakte klasse.

Maar ik heb het idee dat er in VirtualMode helemaal niks veranderd mag worden aan de ListViewItems.

Ik heb op dit moment deze code in SelectedIndexChanged (maar deze code plaatsen in VirtualItemsSelectionRangeChanged heeft geen effect) om de geselecteerde ListViewItems op te halen en de Tag te veranderen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
foreach (int itemIndex in ListViewIssues.SelectedIndices)
{
    ListViewItem lvi = ListViewIssues.Items[itemIndex];
    if (lvi.Tag is Issue)
    { }
    else
    {
        int instanceID = (int)lvi.Tag;
        lvi.Tag = new Issue(instanceID);
        //ListViewIssues.Items[itemIndex] = lvi;
    }
}

Hij haalt alles goed op, er wordt een nieuwe instantie gemaakt van de klasse Issue. Hij geeft ook geen error op regel 9, maar uiteindelijk blijft de tag gewoon van het type Int32 in plaats van het type Issue. Dus er is niks geupdate.
Regel 10 is nu commentaar, maar wat ik daar doe mag blijkbaar helemaal niet in VirtualMode.

Heeft iemand een oplossing voor mijn probleem. MSDN en Google bieden vooralsnog geen oplossing. Maar ik denk dat het probleem is dat ik in VirtualMode gewoon helemaal geen ListViewItems mag wijzigen.

Audentia


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 23:04

mulder

ik spuug op het trottoir

Het is sowieso wel een rare constructie wat je doet. Op MSDN staat dit:
When you set the VirtualMode property to true, you should handle the RetrieveVirtualItem event, providing a valid ListViewItem.
Ow en
C#:
1
2
3
4
5
6
if (!lvi.Tag is Issue) 
{ 
      int instanceID = (int)lvi.Tag; 
      lvi.Tag = new Issue(instanceID); 
      //ListViewIssues.Items[itemIndex] = lvi; 
} 

oogjes open, snaveltjes dicht


  • Exterazzo
  • Registratie: Mei 2000
  • Laatst online: 12-02 15:44
Don Facundo schreef op vrijdag 20 oktober 2006 @ 10:54:
Het is sowieso wel een rare constructie wat je doet. Op MSDN staat dit:

[...]

Ow en
C#:
1
2
3
4
5
6
if (!lvi.Tag is Issue) 
{ 
      int instanceID = (int)lvi.Tag; 
      lvi.Tag = new Issue(instanceID); 
      //ListViewIssues.Items[itemIndex] = lvi; 
} 
Ik handle dat Event ook gewoon af hoor. Maar in dat event kan ik nog geen instantie maken van de klasse Issue, daarom geeft hij in de Tag dan een ID mee voor die klasse. Maar op het moment dat er op geklikt wordt, dan moet er een instantie van die klasse worden aangemaakt en die moet in de Tag gepropt worden. Dat werkt dus niet.

Audentia