2016-07-15 9 views
0

sortieren Ich versuche, eine GridView zu sortieren, die 6 Spalten hat, die von einem DataSet datengebunden sind. Alle diese Daten werden über eine stored procedure aufgerufen. Ich habe die verschiedenen Posts und Tutorials auf dem Interweb durchgesehen und endlich das gefunden, was meiner Meinung nach das beste für meine Seite war. Aber mit diesem, ich erhalte einen Fehler,Kann nicht in GridView, das ein DataSet in VB.NET verwendet

Ausnahmetyp: System.IndexOutOfRangeException
Nachricht: Kann nicht Spalte LoanOfficer

Ich bin offen zu helfen, zu dieser Methode finden oder auch Anregungen eine andere Art, die Sortierung anzugehen. Hier ist mein Code:
ASPX

<asp:GridView ID="dgvBranchChange" runat="server" AutoGenerateColumns="False" AllowPaging="True" 
               CssClass="ReportDataGrid" HeaderStyle-CssClass="DataGridHeader" RowStyle-CssClass="AccentShade" 
               AlternatingRowStyle-CssClass="NoShade" SelectedRowStyle-CssClass="AccentLvl3" 
               PagerSettings-Mode="NumericFirstLast" PagerStyle-HorizontalAlign="center" PagerStyle-CssClass="paging" 
               Width="100%" PageSize="25" AllowSorting="True" ShowHeaderWhenEmpty="true" OnSorting="dgvBranchChange_Sorting"> 
               <AlternatingRowStyle CssClass="NoShade"></AlternatingRowStyle> 
               <Columns> 
                <asp:TemplateField HeaderText="LoanOfficerID" Visible="false" SortExpression="LoanOfficerID"> 
                 <ItemTemplate> 
                  <asp:Label ID="lblBULOID" runat="server" Text='<%# Eval("LO_ID")%>'></asp:Label> 
                 </ItemTemplate> 
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="LoanOfficer" HeaderStyle-HorizontalAlign="Center" SortExpression="LoanOfficer"> 
                 <ItemTemplate> 
                  <asp:Label ID="lblBULOName" runat="server" Text='<%# Eval("LO_Name")%>'></asp:Label> 
                 </ItemTemplate> 
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="Branch_NameID" Visible="false" SortExpression="Branch_NameID"> 
                 <ItemTemplate> 
                  <asp:Label ID="lblBUBranchID" runat="server" Text='<%# Eval("Branch_ID")%>'></asp:Label> 
                 </ItemTemplate> 
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="Branch" HeaderStyle-HorizontalAlign="Center" SortExpression="Branch"> 
                 <ItemTemplate> 
                  <asp:Label ID="lblBUBranchName" runat="server" Text='<%# Eval("Branch_Name")%>'></asp:Label> 
                 </ItemTemplate> 
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="Move_Begin_Date" HeaderStyle-HorizontalAlign="Center" SortExpression="Move_Begin_Date"> 
                 <ItemTemplate> 
                  <asp:Label ID="lblBUBeginDate" runat="server" Text='<%# string.format("{0:MMM yyyy}",Eval("Begin_Date"))%>'></asp:Label> 
                 </ItemTemplate> 
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="Move_End_Date" HeaderStyle-HorizontalAlign="Center" SortExpression="Move_End_Date"> 
                 <ItemTemplate> 
                  <asp:Label ID="lblBUEndDate" runat="server" Text='<%# string.format("{0:MMM yyyy}",Eval("End_Date"))%>'></asp:Label> 
                 </ItemTemplate> 
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="User_who_Added_Change" HeaderStyle-HorizontalAlign="Center" SortExpression="User_who_Added_Change"> 
                 <ItemTemplate> 
                  <asp:Label ID="lblBUUserId" runat="server" Text='<%# Eval("User_ID")%>'></asp:Label> 
                 </ItemTemplate> 
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="Change_Date" HeaderStyle-HorizontalAlign="Center" SortExpression="Change_Date"> 
                 <ItemTemplate> 
                  <asp:Label ID="lblBUCreationDate" runat="server" Text='<%# string.format("{0:MM/dd/yyyy}",Eval("Create_Date"))%>'></asp:Label> 
                 </ItemTemplate> 
                </asp:TemplateField> 
                <asp:CommandField ButtonType="Link" HeaderText="Remove Change" ShowDeleteButton="true" 
                 DeleteText="Remove" /> 
               </Columns> 
              </asp:GridView> 

Code hinter

Protected Sub dgvBranchChange_Sorting(sender As Object, e As GridViewSortEventArgs) 

    'Retrieve the current table 
    Dim dsBranchChange As DataSet 
    Dim asParams(0) As IDbDataParameter 
    Dim lDB As New RHubCoreFunctions.RHubDB 
    asParams(0) = lDB.dpCreateDataParameter("@AccountID", DbType.String, 8, AccountSelected.AccountID) 
    dsBranchChange = lDB.GetDataSet("ssp_Account_LO_Branch_Change", asParams) 

    Dim dt As DataView = dsBranchChange.Tables(0).AsDataView 

    If dt IsNot Nothing Then 

     'sort the data 
     If (dgvBranchChange.SortDirection() = SortDirection.Ascending) Then 
      dt.Sort = e.SortExpression & " ASC" 
     Else 
      dt.Sort = e.SortExpression & " DESC" 
     End If 

     dgvBranchChange.DataSource = dt 
     dgvBranchChange.DataBind() 
    End If 

End Sub 

EDIT: Ich fand heraus, dass ich die falsche SortExpression wurde mit. Ich habe das gleiche wie den Header-Text verwendet, so wie es in so ziemlich all den exemplarischen Vorgehensweisen gegeben wurde. Es muss jedoch derselbe Name wie der Spaltenname aus der Tabelle sein, aus der Sie die Daten abrufen, z. B. die SQL-Tabelle.

Aber jetzt kann ich nur die erste Spalte in aufsteigender sortieren, nichts mehr

Antwort

0

Weil du letzten Sortierausdruck in Session speichern haben.

Bitte überprüfen Sie den Link unten für weitere Informationen, Code ist in C#, aber Sie können leicht in VB konvertieren.

GridView sorting: SortDirection always Ascending

Ich hoffe, dass Sie Hilfe.