Ik heb een vreemd probleem met ListView.SelectedIndexCollection... Even kort uitleggen wat ik wil doen: Ik heb een ListView control met meerdere mogelijke selecties. Bij een bepaalde actie wordt de hele ListView ververst. Nu zou ik voor die actie de op dat moment geselecteerde indices willen bewaren en na het verversen van de lijst die selecties weer terugzetten. Eenvoudig denk je? En ja, dat is het ook. Maar de meest eenvoudige vorm wil niet werken en ik begrijp niet waarom.
Kan iemand dit SelectedIndexCollection verschijnsel toelichten?
C#:
Na verversen is geen enkele regel geselecteerd, ongeacht de begintoestand. De code komt gewoonweg nooit binnenin de foreach lus achter het verversen. Dat begrijp ik dus niet. Wanneer ik echter de SelectedIndexCollection opsla in een ArrayList zoals in onderstaand voorbeeld dan werkt het wel:1
2
3
4
5
6
7
8
9
10
11
12
| // Bewaar huidige selectie ListView.SelectedIndexCollection sic = this.listView.SelectedIndices; // // Ververs listView // // Zet de selectie terug foreach (int index in sic) { this.listView.Items[index].Selected = true; } |
C#:
Zo werkt het dus, maar dat opslaan in de ArrayList lijkt mij een nutteloze tussenstap. Het zou toch ook rechtstreeks met de SelectedIndexCollection moeten werken? Ik sla de SelectedIndexCollection toch op in een nieuwe variabele vóór ik de lijst leegmaak en terug vul. Er is dan (denk ik) toch geen verband meer tussen de variabele sic en de ListView. En toch wordt sic blijkbaar leeggemaakt wanneer ik m'n lijst leegmaak en weer vul. Het is logisch dat de SelectedIndices property van de ListView wanneer de lijst leeggemaakt wordt ook leeggemaakt wordt. Maar waarom een (in mijn ogen) losstaande variabele ook leeggemaakt wordt, dat snap ik niet? Als ik een integer variabele A met waarde 5 opsla in een nieuwe integer variabele B en daarna A 0 maak, dan is B toch ook niet ineens 0? Misschien bekijk ik het verkeerd?1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| // Bewaar huidige selectie ListView.SelectedIndexCollection sic = this.listView.SelectedIndices; // Zet de indices uit de SelectedIndexCollection in een ArrayList ArrayList array_sic = new ArrayList(); foreach (int index in sic) { array_sic.Add(index); } // // Ververs listView // // Zet de selectie terug foreach (int index in array_sic) { this.listView.Items[index].Selected = true; } |
Kan iemand dit SelectedIndexCollection verschijnsel toelichten?
A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.