2015-05-26 2 views
3

Я хочу сортировать мой GridView в CodeBehind, но мой метод сортировки дает мне бесконечный цикл.C# бесконечный цикл при сортировке GridView

Мой GridView, для тестирования, выглядит следующим образом:

<asp:GridView ID="GVEquipe" OnRowDataBound="GVEquipe_RowDataBound" OnSorting="GridView_Sorting" AllowSorting="true" AutoGenerateColumns="False" DataKeyNames="Employee" runat="server"> 
<Columns> 
    <asp:HyperLinkField DataTextField="Employee" DataNavigateUrlFields="Employee" DataNavigateUrlFormatString="~/Profil.aspx?No_Emp={0}" HeaderText="No d'employé" SortExpression="Employee" /> 
    <asp:BoundField DataField="FirstName" HeaderText="Prénom" SortExpression="FirstName" /> 
    <asp:BoundField DataField="Name" HeaderText="Nom" SortExpression="Name" /> 
    <asp:BoundField DataField="Machine" HeaderText="Machine" SortExpression="Machine" /> 
    <asp:TemplateField HeaderText="Infractions" SortExpression="Alerte"> 
     <ItemTemplate> 
      <asp:ImageButton ID="IBAlerte" runat="server" ImageUrl='<%# Convert.ToDouble(Eval("Alerte")) >= 5d ? "~/Images/alerte3.PNG" : Convert.ToDouble(Eval("Alerte")) < 3d ? "~/Images/alerte0.PNG" : "~/Images/alerte2.PNG" %>' CommandArgument='<%# Bind("Employee") %>' /> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Événements" > 
     <ItemTemplate> 
      <asp:ImageButton ID="IBDelai" ImageUrl="~/Images/loupe.png" runat="server" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 

Я Генерирование DataSource в Page_Load.

Мой метод сортировка:

protected void GridView_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     GridView gv = (GridView)sender;    
     gv.Sort(e.SortExpression, e.SortDirection); 
    } 

Я сделал это родовое, потому что я буду использовать его для другого GridView в одной и той же странице.

EDIT: Я меняю много вещей, и теперь это работа.

protected void GridView_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    sortDirection = e.SortDirection; 
    GridView gv = (GridView)sender; 
    if (gv.ID == "GVEquipe") 
     equipeColumnToSort = e.SortExpression; 
    DataSource(); 
} 

Я использую локальную переменную, такие как:

Наконец, в конце моего DataSource() метод, я приказываю мой DataSource (типа IEnumerable):

if (!String.IsNullOrEmpty(equipeColumnToSort)) 
{ 
    switch (equipeColumnToSort) 
    { 
     case "Employee": 
      listEquipes = listEquipes.OrderBy(x => x.Employee); 
      break; 
     case "FirstName": 
      listEquipes = listEquipes.OrderBy(x => x.FirstName); 
      break; 
     case "Name": 
      listEquipes = listEquipes.OrderBy(x => x.Name); 
      break; 
     case "Machine": 
      listEquipes = listEquipes.OrderBy(x => x.Machine); 
      break; 
     case "Alerte": 
      listEquipes = listEquipes.OrderBy(x => x.Alerte); 
      break; 
    } 
    if (sortDirection == SortDirection.Descending) 
     listEquipes = listEquipes.Reverse();     
} 
+6

Вы призывающую вид из внутри рода? – artm

+0

перестроить сетку с обновленным источником данных в зависимости от направления сортировки –

ответ

0

вы не должны» t вызовите Sort изнутри этого события, так как он действительно пойдет в бесконечном цикле.

Что вы должно сделать ручку сортировки. Когда вы посмотрите на образец на MSDN, вы увидите, что вам нужно отсортировать данные, расположенные за сеткой.

Если у вас есть DataTable, например, вы должны сортировать это что-то вроде этого:

DataTable dt; // define your data table 

dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression); 
GVEquipe.DataSource = dt; 
GVEquipe.DataBind(); 
+0

@felix: нужна дополнительная помощь? –

+0

В чем проблема? –

+0

У меня возникли трудности с настройкой DataTable. Я делаю: «DataTable dt = Session [" TaskTable "] как DataTable;" И я установил сеанс в методе для генерации DataSource как: «Session [" TaskTable "] = GVEquipe.DataSource;" Но когда метод выхода сеанса теряется: "+ \t \t \t база {" Impossible d'accéder à оон Objet supprimé \ г \ nNom де l'Objet:. 'Accès à DataContext après Dispose' ".} \t System.InvalidOperationException {System.ObjectDisposedException} " –

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