2012-05-27 4 views
4

Я пишу проект, который получает данные из Data Acess Layer и показывает его в GridView. Проблема состоит в том, чтобы разрешить сортировку по столбцу. Когда я нажимаю на заголовок столбца, возникает следующая ошибка:разрешить сортировку по столбцу gridview

Сведения об исключении: System.Web.HttpException: GridView «GridView1» Триггер События Сортировка, которая не была обработана.

Вот код .cs:

public partial class Default: System.Web.UI.Page 
    { 
     EmployeesTableAdapter eta = new EmployeesTableAdapter(); 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       GridView1.DataSource = eta.GetData(); 
       GridView1.DataBind(); 
      } 
     } 
    } 

Здесь .aspx кода (только GridView):

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
     AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None" 
     AutoGenerateColumns="False"> 
     <AlternatingRowStyle BackColor="White" /> 

<Columns> 
      <asp:TemplateField HeaderText="Select"> 
       <ItemTemplate>     
        <asp:CheckBox ID="CheckBox1" runat="server"> 
       </asp:CheckBox> 
       </ItemTemplate>     
      </asp:TemplateField> 

      <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" /> 
      <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" /> 
      <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" /> 

      <asp:TemplateField HeaderText="View"> 
       <ItemTemplate>     
        <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="images/view.png"/> 
       </ItemTemplate>     
      </asp:TemplateField> 

      <asp:TemplateField HeaderText="Edit"> 
       <ItemTemplate>     
        <asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="images/edit.png"/> 
       </ItemTemplate> 
      </asp:TemplateField> 

     </Columns> 
     <EditRowStyle BackColor="#2461BF" /> 
     <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#EFF3FB" /> 
     <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
     <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
     <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
     <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
     <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
     </asp:GridView> 

ли someony знаю, как разрешить сортировку по столбцам?

ответ

6

Вы должны определить сортировки melhod, и реализовать его:

<asp:GridView ID="GridView1" **OnSorting="gridViewSorting"** runat="server" /> 



protected void gridViewSorting(object sender, GridViewSortEventArgs e) 
{ 
    DataTable dataTable = gridView.DataSource as DataTable; 

    if (dataTable != null) 
    { 
     DataView dataView = new DataView(dataTable); 
     dataView.Sort = your sort expression 

     gridView.DataSource = dataView; 
     gridView.DataBind(); 
    } 
} 
8

Элемент GridView не сортирует себя. Вам нужно добавить код для сортировки GridView и подключить его.

Во-первых, нужно добавить имя в OnSorting события в GridView на .aspx странице:

<asp:GridView ID="gridView" OnSorting="gridView_Sorting" runat="server" /> 

Затем добавить это событие в коде-позади. This example также обрабатывает изменение направления сортировки - после сортировки пользователя может потребоваться изменить направление сортировки, и вы должны отслеживать это.

private string ConvertSortDirectionToSql(SortDirection sortDirection) 
    { 
     string newSortDirection = String.Empty; 

    switch (sortDirection) 
    { 
     case SortDirection.Ascending: 
      newSortDirection = "ASC"; 
      break; 

     case SortDirection.Descending: 
     newSortDirection = "DESC"; 
     break; 
    } 

    return newSortDirection; 
} 

protected void gridView_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    DataTable dataTable = gridView.DataSource as DataTable; 

    if (dataTable != null) 
    { 
     DataView dataView = new DataView(dataTable); 
     dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection); 

     gridView.DataSource = dataView; 
     gridView.DataBind(); 
    } 
} 
0

Почему вы все заново изобретаете колесо и код для обработки сортировки, когда все, что вам нужно сделать, это?

AllowSorting="True" 
+3

Это позволяет сортировать, метод сортировки должен быть написан вручную – brianforan

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