2016-07-15 123 views
0

我試圖對GridView進行排序,該列中有6列是DataSet的數據綁定。所有這些數據都是通過stored procedure調用的。我已經瀏覽了interweb上不同的帖子和教程,並最終得到了我認爲對我的頁面最好的一個。但是這一個,我不斷收到一個錯誤,無法在使用VB.NET中的DataSet的GridView中進行排序

異常類型:System.IndexOutOfRangeException
消息:找不到列LoanOfficer

我願意幫助這個方法,甚至建議一種處理排序的不同方法。 這裏是我的代碼:
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> 

代碼隱藏

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 

編輯: 我發現我用錯了的SortExpression。我使用的是與標題文本相同的文本,就像所有演練/教程中給出的那樣。但它必須與從表中獲取數據的列名相同,即SQL表。

但現在我只能按升序的第一列,僅此而已

回答

相關問題