Относительный новичок здесь. Обнаружено, что я должен написать обработчик событий для обработки сортировки моих данных с объекта objectatatource. Нашел много ссылок на код, как то, что ниже, но когда код запускается, я получаю сообщение «Не удается найти столбец xxx», где xxx - это имя столбца, который я пытаюсь сортировать.Сортировка gridview - не найден столбец
Я проверил, что e.SortExpression возвращает соответствующее имя столбца, но проблема находится во второй строке ниже, где я пытаюсь создать datatable (dt) из GridView1.Datasource. Значение dt после этого оператора - «ничего», поэтому остальная часть кода выходит из строя.
Кроме того, я перечисляю большинство определений 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, я понимаю, что вы говорите, но не может заставить его работать. Я добавил параметр, затем ссылался на этот параметр в SortParameterName ODS и, наконец, добавил соответствующий параметр в мой оператор метода SELECT. Но поскольку я прокомментировал мой метод сортировки в коде, я теперь получаю сообщение об ошибке: «GridView« GridView1 »выпустил событие« Сортировка », которое не обрабатывалось», что и заставило меня по этой дороге в первую очередь. –
Ryk
Сначала включите сортировку сетки, установив EnableSorting в значение true. Затем добавьте имя параметра сортировки в источник данных объекта. И затем, удалите обработчик для сортировки события, вам это не нужно. Если у вас все еще есть проблемы, сообщите мне, я укажу вам на рабочий пример. –
Да, я уже сделал все это, Wiktor. Я мог бы использовать этот пример. Благодаря! – Ryk