繁体   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