Hallo
Ich verwende in meiner ASP.NET Anwendung eine ListView mit den Spalten [Nachname][Vorname] usw...
Diese ListView listet Mitarbeiter auf die man vorher über eine maske sucht. Das heißt die Liste wird erst erzeugt wenn der Benutzer auf Suchen klickt. Jetzt möchte Ich über die header texte von der ListView wie Nachname und Vorname, die ListView danach sortieren lassen. Ich habe mir viele Tutorials durchgelesen undauch die msdn angeschaut. Jedoch funktioniert kein beispiel wirklich 😦 Ich versuche zurzeit über das ListView Attribut OnSorting="myListView_Sorting" zu sortieren.
Hier ist meine aspx Seite (Nur die ListView Layouttemplate):
<asp:ListView runat="server" ID="myListView" OnItemCommand="myListView_ItemCommand" OnSelectedIndexChanging="myListView_SelectedIndexChanging" OnSorting="myListView_Sorting">
<LayoutTemplate>
<table id="UserTable" runat="server" border="0" width="800" cellpadding="0" cellspacing="0">
<tr style="background-color:#E5E5FE" class="TableClass">
<th align="left" id="th4" runat="server"><asp:LinkButton ID="lnkNachname" CommandArgument="Nachname" CommandName="Sort" runat="server" >id_Nachname</asp:LinkButton></th>
<th align="left" id="th3" runat="server"><asp:LinkButton ID="lnkVorname" CommandArgument="Vorname" CommandName="Sort" runat="server" >id_Vorname</asp:LinkButton></th>
<th align="left" id="th5" runat="server"><asp:Label ID="lnkTelefon" runat="server" >id_Telefon</asp:Label></th>
<th align="left" id="th6" runat="server"><asp:Label ID="lnkAbteilung" runat="server">id_Abteilung</asp:Label></th>
<th align="left" id="th2" runat="server"><asp:Label ID="lnkemail" runat="server" >id_Email</asp:Label></th>
</tr>
<tr runat="server" id="ItemPlaceholder">
</tr>
</table>
</LayoutTemplate>
...
<Itemtemplate>
....
Mein Cs Code dazu:
protected void myListView_Sorting(object sender, ListViewSortEventArgs e)
{
if (e.SortDirection == System.Web.UI.WebControls.SortDirection.Ascending)
{
System.Web.UI.WebControls.SortDirection sortdir = System.Web.UI.WebControls.SortDirection.Descending;
myListView.Sort(e.SortExpression, sortdir);
}
else
{
System.Web.UI.WebControls.SortDirection sortdir = System.Web.UI.WebControls.SortDirection.Ascending;
myListView.Sort(e.SortExpression, sortdir);
}
}
Ich hab mir auch vllt mal gedacht das ganze in ein DataSet zu importieren und dann zu sortieren und wieder ausgeben zu lassen. Wie genau kann Ich den jetzt einfach und schnell eine ListView sortieren lassen ...das kann doch nicht so schwer sein 😦
Gruß W.T 🙂
Hallo,
das automatische Sortieren klappt nur, wenn die DataSource der ListView eine der Ableitungen von DataSourceControl ist.
Im Falle einer ObjectDataSource
musst Du zusätzlich noch aufpassen, dass die SelectMethod
ein DataTable
, DataView
oder DataSet
liefert.
Andernfalls musst Du von Hand Sortieren in der OnSorting-Methode (also Daten neu laden, sortieren, und sortierte Daten neu an die ListView binden).
ACHTUNG: Auf keinen Fall solltest Du in der OnSorting
-Methode selbst die Sort
-Methode der ListView aufrufen!! Die löst nämlich das Sorting-Ereignis erneut aus und Du bekommst eine Endlosrekursion.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca