0

I'm trying to sort a GridView that has 6 columns that are databound by a DataSet. All of this data is being called through a stored procedure. I've looked through the different posts and tutorials out on the interweb and finally got what I thought would be the best one for my page. But with this one, I keep getting an error,

Exception Type: System.IndexOutOfRangeException
Message: Cannot find column LoanOfficer

I'm open to help on this method or even suggestions a different way to tackle sorting. Here is my 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 Behind

    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: I found out that I was using the wrong SortExpression. I was using the same one as the header text as thats what was given in pretty much all the walkthroughs/tutorials. But it has to be the same name as the column name from the table that you're getting the data from, i.e the SQL table.

But now I can only sort the first column in Ascending, nothing more

1 Answers1

0

Because you have to save last sort expression in Session.

Please check link below for more information,code is in C# but you easily can convert to VB.

GridView sorting: SortDirection always Ascending

I hope help you.

Community
  • 1
  • 1
Hamed Javaheri
  • 538
  • 3
  • 13