Laden...

Sortierte ListView, erstes Element selektieren

Erstellt von Nargaff vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.478 Views
N
Nargaff Themenstarter:in
15 Beiträge seit 2008
vor 16 Jahren
Sortierte ListView, erstes Element selektieren

Hi,

ich habe eine sortierte ListView in Detail-Modus und würde gerne das Element, das in der Liste ganz oben steht, per Code, automatisch anwählen. Ich kann zwar per listView.Items[index].Selected = true ein Element anwählen, aber wenn ich für index 0 einsetze, dann wird nur das Element selektiert, das ich als erstes in die Liste eingefügt habe und nicht das welches nach der aktuellen Sortierung in der Liste ganz oben steht. Wie kann ich also rausfinden welches Element gerade an der ersten Position der Liste steht?

Gruß
Bernhard

170 Beiträge seit 2007
vor 16 Jahren

Gemäss http://msdn2.microsoft.com/en-us/library/system.windows.forms.listview_members(VS.80).aspx könnte das "TopItem" sein, das du setzen musst. Habe aber kein VS hier um das zu überprüfen.

Build something that's idiot proof, and they'll build a better idiot

N
Nargaff Themenstarter:in
15 Beiträge seit 2008
vor 16 Jahren

Hi Shihan,

danke für den Tipp, aber TopItem ist immer nur das Item, das aktuell ganz oben in der Liste zu sehen ist. Wenn man die Liste weiter nach unten scrollt wird das Element selektiert, das gerade am oberen Rand zu sehen ist. 😦

Gruß
Nargaff

915 Beiträge seit 2006
vor 16 Jahren

Hallo Nargaff,

eine Funktion oder ein Property das dir die Sortierten Items zurückliefert ist mir leider nicht bekannt.

Aber um dennoch dieses zu implementieren würde ich folgendes für die Sortierung nachprogrammieren: Link. Auch wenn es zuerst den Anschein hat das dies Sinnlos erscheinen mag. Da ja standardmäßig bereits eine Sortierung anhand von ListView.Sorting = SortOrder.Ascending; und ListView.Sort(); vornehmen kannst. Macht es dennoch Sinn die Sortierungsalgorithmen dafür selbst zu schreiben, denn du kannst anhand dessen über Array.Sort() die Sorted Items ermitteln. Schön wäre es das ganze noch in einer neuen Klasse die von ListView abgeleitet wurde zu implementieren und dort dann das Property SortedItems zur verfügung zu stellen, die dir eben dieses sortierte Array zurück gibt.


        public ListViewColumnSorter m_clSorter; // <-- siehe dazu den Link zur MSDN Seite.
        public ListViewItem[] SortedItems
        {
            get
            {
                ListViewItem[] array = new ListViewItem[base.Items];
                base.Items.CopyTo(Copy, 0);
                Array.Sort<ListViewItem>(array, m_clSorter.Compare);
                return array;
            }
        }

/PS
(Im Editor geschrieben, Fehler daher nicht ausgeschlossen).

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

N
Nargaff Themenstarter:in
15 Beiträge seit 2008
vor 16 Jahren

Hi

eine Funktion oder ein Property das dir die Sortierten Items zurückliefert ist mir leider nicht bekannt.

Ja, dann werde ich es wohl irgendwie von Hand machen müssen. Danke für die Tipps.

Gruß
Nargaff

5.299 Beiträge seit 2008
vor 16 Jahren

Hi Nargaff!

Eigentlich ist Listview für die Arbeit mit Daten in Tabellenform recht ungeeignet.
DataGridView ist dafür konzipiert.
Da habich grade ein Snippet zu gebastelt.

Ist natürlich mühsam, sich da einzuarbeiten, aber ehe man da jetzt Workarounds für Zugriffe auf den ersten Datensatz anfängt (und weitere Workarounds mögen folgen)...

Der frühe Apfel fängt den Wurm.