【问题标题】:Not able to sort in GridView that uses a DataSet in VB.NET无法在使用 VB.NET 中的 DataSet 的 GridView 中进行排序
【发布时间】:2016-11-18 22:52:29
【问题描述】:

我正在尝试对GridView 进行排序,该GridView 有6 列由DataSet 数据绑定。所有这些数据都通过stored procedure 调用。我浏览了互联网上的不同帖子和教程,最后得到了我认为最适合我的页面的内容。但是有了这个,我不断收到错误,

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

但现在我只能对升序中的第一列进行排序,仅此而已

【问题讨论】:

    标签: asp.net vb.net sorting visual-studio-2012 gridview


    【解决方案1】:

    因为您必须在 Session 中保存最后一个排序表达式。

    请查看以下链接了解更多信息,代码为 C#,但您可以轻松转换为 VB。

    GridView sorting: SortDirection always Ascending

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多