Announcement

Collapse
No announcement yet.

ListView sortieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ListView sortieren

    Hallo zusammen,

    ich habe ein Problem mit dem Sortieren im ListView-Control. Im LayoutTemplate habe ich ein LinkButton als Überschrift genommen. Der LinkButton hat die Eigenschaften CommandName="sort" und CommandArgument="MaterialNr".
    Jetzt weiß ich nicht wie ich in dem Ereignis Sorting(Protected Sub lvBestand_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewSortEventArgs) Handles lvBestand.Sorting) die Sortierung vornehmen muss. Kann mir da jemand weiterhelfen?? Hab schon gegoogelt ... aber nicht wirklich etwas gefunden was mir weiterhilft.

    Danke im Voraus!

    HTML Code:
     
        <asp:Panel ID="Panel1" runat="server" Height="600px" Width="100%" ScrollBars="auto">  
            <table cellspacing="0" cellpadding="0" width="98%">
                <tr valign="top">
                    <td valign="top" width="100%">                    
                        <asp:ListView ID="lvBestand" runat="server">
                            <ItemTemplate>
                                <tr style="" class="ListViewItemTemplate">
                                    <td align="center"><asp:Label ID="MaterialNrLabel"       runat="server" Text='<%# Eval("MaterialNr") %>' /></td>
                                    <td align="left"  ><asp:Label ID="KurzTextLabel"         runat="server" Text='<%# Eval("KurzText") %>' /></td>
                                    <td align="right" ><asp:Label ID="IstMengeLabel"         runat="server" Text='<%# Eval("IstMenge") %>' /></td>
                                    <td align="right" ><asp:Label ID="FreieMengeLabel"       runat="server" Text='<%# Eval("FreieMenge") %>' /></td>
                                    <td align="right" ><asp:Label ID="ReservierteMengeLabel" runat="server" Text='<%# Eval("ReservierteMenge") %>' /></td>
                                    <td align="right" ><asp:Label ID="GebundeneMengeLabel"   runat="server" Text='<%# Eval("GebundeneMenge") %>' /></td>
                                    <td align="right" ><asp:Label ID="GebindegroesseLabel"   runat="server" Text='<%# Eval("Gebindegroesse") %>' /></td>
                                    <td align="right" ><asp:Label ID="MeldebestandLabel"     runat="server" Text='<%# Eval("Meldebestand") %>' /></td>
                                </tr>
                            </ItemTemplate>
                            <AlternatingItemTemplate>
                                <tr style="" class="ListViewAlternatingItemTemplate">
                                    <td align="center"><asp:Label ID="MaterialNrLabel"       runat="server" Text='<%# Eval("MaterialNr") %>' /></td>
                                    <td align="left"  ><asp:Label ID="KurzTextLabel"         runat="server" Text='<%# Eval("KurzText") %>' /></td>
                                    <td align="right" ><asp:Label ID="IstMengeLabel"         runat="server" Text='<%# Eval("IstMenge") %>' /></td>
                                    <td align="right" ><asp:Label ID="FreieMengeLabel"       runat="server" Text='<%# Eval("FreieMenge") %>' /></td>
                                    <td align="right" ><asp:Label ID="ReservierteMengeLabel" runat="server" Text='<%# Eval("ReservierteMenge") %>' /></td>
                                    <td align="right" ><asp:Label ID="GebundeneMengeLabel"   runat="server" Text='<%# Eval("GebundeneMenge") %>' /></td>
                                    <td align="right" ><asp:Label ID="GebindegroesseLabel"   runat="server" Text='<%# Eval("Gebindegroesse") %>' /></td>
                                    <td align="right" ><asp:Label ID="MeldebestandLabel"     runat="server" Text='<%# Eval("Meldebestand") %>' /></td>
                                </tr>
                            </AlternatingItemTemplate>
                            <EmptyDataTemplate>
                                <table runat="server" style="" width="70%">                                                                                             
                                    <tr runat="server" style="" class="ListViewLayoutTemplate">                                                
                                        <th width="15%" runat="server">MaterialNr</th>
                                        <th width="25%" runat="server">KurzText</th>
                                        <th width="10%" runat="server">IstMenge</th>
                                        <th width="10%" runat="server">FreieMenge</th>
                                        <th width="10%" runat="server">ReservierteMenge</th>
                                        <th width="10%" runat="server">GebundeneMenge</th>
                                        <th width="10%" runat="server">Gebindegroesse</th>
                                        <th width="10%" runat="server">Meldebestand</th>
                                    </tr>                                        
                                    <tr class="ListViewEmptyDataTemplate">
                                        <td colspan="8">Leider kein Bestand zu MaterialNr '<%=ddlMaterialNr.Text.ToString()%>' vorhanden</td>
                                    </tr>
                                </table>
                            </EmptyDataTemplate>                      
                            <LayoutTemplate>
                                <table runat="server" width="100%">
                                    <tr runat="server">
                                        <td runat="server" width="100%">
                                            <table ID="itemPlaceholderContainer" runat="server" border="0" style="" width="70%">
                                                <tr runat="server" style="" class="ListViewLayoutTemplate">
                                                    <th width="15%" runat="server"><asp:LinkButton ID="LinkButton1" runat="server" Text="MaterialNr"       CommandName="sort" CommandArgument="MaterialNr"       CssClass="Sortierung">MaterialNr      </asp:LinkButton></th>
                                                    <th width="25%" runat="server"><asp:LinkButton ID="LinkButton2" runat="server" Text="KurzText"         CommandName="sort" CommandArgument="KurzText"         CssClass="Sortierung">KurzText        </asp:LinkButton></th>
                                                    <th width="10%" runat="server"><asp:LinkButton ID="LinkButton3" runat="server" Text="IstMenge"         CommandName="sort" CommandArgument="IstMenge"         CssClass="Sortierung">IstMenge        </asp:LinkButton></th>
                                                    <th width="10%" runat="server"><asp:LinkButton ID="LinkButton4" runat="server" Text="FreieMenge"       CommandName="sort" CommandArgument="FreieMenge"       CssClass="Sortierung">FreieMenge      </asp:LinkButton></th>
                                                    <th width="10%" runat="server"><asp:LinkButton ID="LinkButton5" runat="server" Text="ReservierteMenge" CommandName="sort" CommandArgument="ReservierteMenge" CssClass="Sortierung">ReservierteMenge</asp:LinkButton></th>
                                                    <th width="10%" runat="server"><asp:LinkButton ID="LinkButton6" runat="server" Text="GebundeneMenge"   CommandName="sort" CommandArgument="GebundeneMenge"   CssClass="Sortierung">GebundeneMenge  </asp:LinkButton></th>
                                                    <th width="10%" runat="server"><asp:LinkButton ID="LinkButton7" runat="server" Text="Gebindegroesse"   CommandName="sort" CommandArgument="Gebindegroesse"   CssClass="Sortierung">Gebindegroesse  </asp:LinkButton></th>
                                                    <th width="10%" runat="server"><asp:LinkButton ID="LinkButton8" runat="server" Text="Meldebestand"     CommandName="sort" CommandArgument="Meldebestand"     CssClass="Sortierung">Meldebestand    </asp:LinkButton></th>
                                                </tr>
                                                <tr ID="itemPlaceholder" runat="server"></tr>
                                            </table>
                                        </td>
                                    </tr>
                                    <tr runat="server">
                                        <td runat="server" style="">
                                        </td>
                                    </tr>
                                </table>
                            </LayoutTemplate>                        
                        </asp:ListView>
                    </td>        
                </tr>
            </table>    
        </asp:Panel>      
    Code:
    Protected Sub lvBestand_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewSortEventArgs) Handles lvBestand.Sorting       
    
            Dim a As String = e.SortDirection.ToString()
            Dim b As String = e.SortExpression.ToString()
    
        End Sub
    End Class

  • #2
    http://msdn.microsoft.com/de-de/libr...w.sorting.aspx
    ?
    Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

    Comment


    • #3
      Hey,

      danke für den Link. Den hatte ich auch schon gefunden. In dem Beispiel wird aber mit einer SqlDataSource in der aspx-Seite gearbeitet. Ich binde mein ListView aber in der CodeBehinde-Seite.

      Arbeitet ich mit einer SqlDataSource in der aspx-Seite funktioniert das alles wunderbar von alleine. Ich muss nur beim LinkButton die Eigenschaft CommandName auf "sort" und CommandArgument auf die zu sortierende Spalte setzen und es funktioniert alles.

      Arbeite ich allerdings nicht mit einer SqlDataSource in der aspx-Seite sondern weiser meinem ListView die DataSource in der CodeBehindPage zu, funktioniert das alles nicht mehr so schön.
      Ich muss auf das Ereignis Sorting in der CodeBehindPage reagieren. Nur weiß ich jetzt nicht mit welchen Befehlen ich mein ListView sortiert bekomme.

      Code:
       
          Protected Sub PopulatelvBestand()
      
              Dim MaterialNr As String
              MaterialNr = ddlMaterialNr.SelectedValue.ToString()
      
              Dim conn As New SqlConnection        
              conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("EWPM").ConnectionString
              Dim cmd As New SqlCommand("sp_Bestand_GetBestand", conn)
              cmd.CommandType = CommandType.StoredProcedure
              'Parameter 1
              cmd.Parameters.Add(New SqlParameter("@MaterialNr", SqlDbType.VarChar, 18))
              cmd.Parameters("@MaterialNr").Direction = ParameterDirection.Input
              If MaterialNr = "" Then
                  cmd.Parameters("@MaterialNr").Value = DBNull.Value
              Else
                  cmd.Parameters("@MaterialNr").Value = MaterialNr
              End If
      
              ' Ist die Verbindung geschlossen
              If conn.State = ConnectionState.Closed Then
                  Try
                      conn.Open()
                      lvBestand.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection)
                  Catch se As SqlException
                      Session("Fehlerstring") = se.Message
                  Catch ex As Exception
                      Session("Fehlerstring") = ex.Message
                  Finally
                      lvBestand.DataBind()
                      conn.Close()
                  End Try
              End If
          End Sub

      Comment


      • #4
        Originally posted by Dirk M. View Post
        Nur weiß ich jetzt nicht mit welchen Befehlen ich mein ListView sortiert bekomme.
        du könntest deine Selektion erst mal in DataTable laden

        Dann über die Table-Eigenschaft DefaultView.Sort - Sortexpression als Text eingeben

        und dann sortierte DataTable binden:

        Code:
         
        
        private void Bind(string sortExpression)
        
            {
        
        
        // Achtung!! hier muss man SortDirection in ViewState speichern
        // und jedes mal invertieren
        // sonst wird das nur ein mal funktonieren.
        
        
           sortExpression = sortExpression.Replace("Ascending", "ASC");
        
        
        
        using (SqlConnection conn = new SqlConnection(_connStr))
        
        {
        
            conn.Open();
        
            using (SqlDataAdapter dAd = new SqlDataAdapter("select * from Details order by Name", conn))
        
            {
        
            DataTable dTable = new DataTable();
        
            dAd.Fill(dTable);
        
            // Sort now
        
            dTable.DefaultView.Sort = sortExpression;
        
            // Bind data now
        
            ListView1.DataSource = dTable;
        
            ListView1.DataBind();
        
            }
        
        conn.Close();
        
        }
        
        }
        Sortieren dann:

        Code:
        protected void SortListViewRecords(object sender, ListViewSortEventArgs e)
        
        {
        
            string sortExpression = e.SortExpression + " " + e.SortDirection;
        
            Bind(sortExpression);
        
        }
        Zuletzt editiert von vadym voytas; 26.02.2010, 02:07.
        Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

        Comment


        • #5
          Danke für die Hilfe ... jetzt klappt es auch mit dem Sortieren :-)

          Comment

          Working...
          X