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
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
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
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(
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
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.