2013-09-28 3 views
0

Относительный новичок здесь. Обнаружено, что я должен написать обработчик событий для обработки сортировки моих данных с объекта 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> 

Спасибо!

ответ

0

Вам не нужно обрабатывать событие сортировки, если вы работаете с ObjectDataSource. Вместо этого установите SortParameterName в строку (например, «OrderBy») и увеличить свой бизнес-метод подписи, который ObjectDataSource использует для извлечения данных с помощью этого параметра:

public IEnumerable<Whatever> Retrieve(string OrderBy, ... other arguments) ... 

Сетка будет передавать значение параметра СОД, а затем ОРВ передаст его вашему методу.

+0

Wiktor, я понимаю, что вы говорите, но не может заставить его работать. Я добавил параметр , затем ссылался на этот параметр в SortParameterName ODS и, наконец, добавил соответствующий параметр в мой оператор метода SELECT. Но поскольку я прокомментировал мой метод сортировки в коде, я теперь получаю сообщение об ошибке: «GridView« GridView1 »выпустил событие« Сортировка », которое не обрабатывалось», что и заставило меня по этой дороге в первую очередь. – Ryk

+0

Сначала включите сортировку сетки, установив EnableSorting в значение true. Затем добавьте имя параметра сортировки в источник данных объекта. И затем, удалите обработчик для сортировки события, вам это не нужно. Если у вас все еще есть проблемы, сообщите мне, я укажу вам на рабочий пример. –

+0

Да, я уже сделал все это, Wiktor. Я мог бы использовать этот пример. Благодаря! – Ryk

Смежные вопросы