0
這裏的相對新手。發現我必須編寫一個事件處理程序來處理來自objectdatasource的數據排序。發現了很多對代碼的引用,如下所示,但是當代碼運行時,我收到消息「找不到列xxx」,其中xxx是我嘗試排序的列的名稱。排序gridview - 找不到列
我已驗證e.SortExpression正在返回正確的列名稱,但問題似乎在下面的第二行,我嘗試從GridView1.Datasource創建一個數據表(dt)。在這個語句之後dt的值是'Nothing',所以其餘的代碼失敗。
此外,我列出了大部分的gridview定義,以防有用。
Protected Sub GridView1_Sorting(sender As Object, e As GridViewSortEventArgs) Handles GridView1.Sorting
Dim dt As Data.DataTable = New Data.DataTable(GridView1.DataSource)
If Not dt Is Nothing Then
dt.DefaultView.Sort = e.SortExpression
GridView1.DataSource = dt
GridView1.DataBind()
End If
End Sub
ASPX片段:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="ObjectDataSource1" CellPadding="4"
EmptyDataText="No records found for your search" ForeColor="#333333"
GridLines="None" Width="930px" BorderColor="#CCCCCC" Font-Size="12px" AllowSorting="True">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:BoundField DataField="CustName" HeaderText="CustName"
SortExpression="CustName" />
<asp:BoundField DataField="CustType" HeaderText="CustType"
SortExpression="CustType" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" />
<asp:TemplateField HeaderText="Address" SortExpression="Addr1">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Addr1") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Addr1") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone" />
<asp:BoundField DataField="ContactName" HeaderText="ContactName"
SortExpression="ContactName" />
<asp:BoundField DataField="LastContactDate" HeaderText="LastContact" SortExpression="LastContactDate" dataformatstring="{0:d}" />
<asp:BoundField DataField="CustSince" HeaderText="CustSince"
SortExpression="CustSince" dataformatstring="{0:MM/dd/yyyy}" />
<asp:BoundField DataField="Status" HeaderText="Status"
SortExpression="Status" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" />
<asp:BoundField DataField="Source" HeaderText="Source"
SortExpression="Source" />
<asp:BoundField DataField="RelMgr" HeaderText="RelMgr"
SortExpression="RelMgr" />
<asp:TemplateField HeaderText="RelMgrInfo">
<ItemTemplate>
<asp:HyperLink ID="RelMgrEmailLink" runat="server" NavigateUrl='<%#Eval("RelMgrEmail", "mailto:{0}")%>' Text='<%# Eval("RelMgrEmail") + "<br>" + Eval("RelMgrPhone")%> '> </asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
謝謝!
Wiktor,我明白你在說什麼,但無法讓它工作。我向添加了一個參數,然後在ODS的SortParameterName中引用該參數,最後在我的SELECT方法語句中添加了一個相應的參數。但是因爲我在代碼隱藏中註釋了我的排序方法,所以我現在得到一個錯誤:「GridView'GridView1'觸發了事件排序,但沒有處理」,這首先讓我開始了這條路。 –
Ryk
首先,通過將EnableSorting設置爲true來啓用網格視圖排序。然後,將排序參數名稱添加到對象數據源。然後,刪除排序事件處理程序,你不需要它。如果你仍然有麻煩,請告訴我,我會指出你一個工作的例子。 –
是的,我已經完成了所有這些事情,Wiktor。我可以使用這個例子。謝謝! – Ryk