[英]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。
希望對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.