c # - .NET: TopItem-ejendommen i ListView fejler med 'ShowGroups'=true

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en ListView, der viser omkring 300 genstande. Når noget er ændret, og jeg skal genopbygge listen, vil jeg gerne have rullepositionen uændret, så de samme elementer er stadig synlige og i samme position i listen.
Metoden 'EnsureVisible' suger, da den er satisificeret med 'Synlig', ikke den samme position (resultatet er, at interessepunktet altid rulles ned til bunden af ​​listen).


Min løsning på problemet er at gemme (min) 'ID' i List-> TopItem, genfylde listen og derefter ringe List-> TopItem=newItemWithSameID (skal indstilles to gange for at fungere af en eller anden grund). Dette virker som en charme for grundlæggende 'ungrouped' lister.


MEN - hvis listen har 'ShowGroups=true', vil det ikke fungere. Egenskaben TopItem vil så altid være det første element i listen, ikke det første synlige element, som dokumenationen siger.


Er der en løsning? Jeg gik rundt og fandt en anden tabt sjæl med det samme problem. Han havde en temmelig sjov diskussion om Microsoft-support om det uden succes. (Http://social.msdn.microsoft.com/Forums/en/winforms/thread/8a81c5a6-251c-4bf9-91c5-a937b5cfe9f3).


Så - mit spørgsmål er: er der en løsning? Jeg har virkelig brug for listen, der skal grupperes, og jeg hader rigtig, når listen hopper rundt, når noget ændres.


Jeg har ikke tømt nogen kode her, da al den kode du skal reproducere her er i diskussionen ovenfor.


Mange tak!

Bedste reference


Her er en løsning, jeg har brugt til dette problem:


public ListViewItem RealTopItem
{
    int i = 0;
    while (i < Items.Count && !ClientRectangle.Contains(Items[i].Bounds))
        i++;

    return Items[i];
}


Desværre har det for nylig mislykkedes for en kunde i underopgørelsen efter at have arbejdet i et år i min kode. I min fejlfinding forsøgte jeg først at deaktivere grupper, og problemet gik væk. Så da jeg igen reaktiverede grupper igen, blev problemet aldrig genoptaget. Jeg har ingen anelse lige nu, hvad der kunne være forkert der.