簡體   English   中英

無法在使用VB.NET中的數據集的GridView中排序

[英]Not able to sort in GridView that uses a DataSet in VB.NET

我正在嘗試對具有由DataSet進行數據綁定的6列的GridView進行排序。 所有這些數據都通過stored procedure被調用。 我瀏覽了Interweb上的各種帖子和教程,最后得到了我認為最適合我的頁面的內容。 但是有了這個,我不斷出錯,

異常類型: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表)中的列名相同。

但是現在我只能對Ascending中的第一列進行排序,僅此而已

因為您必須在Session中保存最后一個排序表達式。

請檢查下面的鏈接以獲取更多信息,代碼在C#中,但您可以輕松轉換為VB。

GridView排序:SortDirection始終升序

希望對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM