Laden...

Wie kann Ich in meiner ListView nach bestimmten Spalten sortieren über das OnSorting Ereignis

Erstellt von omega90 vor 11 Jahren Letzter Beitrag vor 11 Jahren 726 Views
O
omega90 Themenstarter:in
51 Beiträge seit 2012
vor 11 Jahren
Wie kann Ich in meiner ListView nach bestimmten Spalten sortieren über das OnSorting Ereignis

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 🙂

3.170 Beiträge seit 2006
vor 11 Jahren

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