2013-08-12 3 views
0

Существует такой сетчатый вид, который имеет два столбца, которые необходимо отсортировать.разрешить сортировку на основе столбцов по gridview

Проблема заключается в том, что я получаю список классов для привязки данных к источнику данных gridview, при щелчке столбца сетки возникает выражение сортировки, но источник данных равен нулю, поэтому как я могу это достичь.

Markup:

<asp:GridView ID="grdDelegateList" runat="server" CssClass="gridviewBorder" AutoGenerateColumns="False" AllowSorting="true" 
        EmptyDataText="There are no delegates assigned for this bridge." CellPadding="2" 
        Style="margin-left: 0px" BackColor="White" Font-Names="Calibri" BorderWidth="1px" 
        Width="100%" AllowPaging="True" GridLines="Horizontal" RowHoverBackColor="#666666" 
        RowHoverForeColor="White" SelectedRowStyle-BackColor="#333333" SelectedRowStyle-ForeColor="White" 
        PageSize="20" OnPageIndexChanging="grdDelegateList_PageIndexChanging" OnRowCommand="grdDelegateList_RowCommand" 
        OnRowDataBound="grdDelegateList_RowDataBound" 
        OnRowDeleting="grdDelegateList_RowDeleting" onsorting="grdDelegateList_Sorting"> 
        <Columns> 
         <asp:BoundField HeaderText="Employee ID" DataField="DelegateID" ItemStyle-HorizontalAlign="Center" SortExpression="DelegateID" 
          HeaderStyle-HorizontalAlign="Center" /> 
         <asp:BoundField HeaderText="Display Name" DataField="FullName" ItemStyle-HorizontalAlign="Left" SortExpression="FullName" 
          HeaderStyle-HorizontalAlign="Left" /> 
         <asp:TemplateField HeaderText="Remove" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Left"> 
          <ItemTemplate> 
           <span style="cursor: pointer"> 
            <asp:LinkButton ID="ImgRemove" runat="server" CommandName="Delete" CommandArgument='<%# Eval("ID") %>' 
             Text="Remove" OnClientClick="return confirm('Are you sure you want to remove this Delegate');"> 
             <img alt="Remove" src="Images/trash.png" style="border:0;" /> 
            </asp:LinkButton></span> 
          </ItemTemplate> 
         </asp:TemplateField> 
        </Columns> 

       </asp:GridView> 

Сортировать Экспрессия событие:

protected void grdDelegateList_Sorting(object sender, GridViewSortEventArgs e) 
     { 
      DataTable table = grdDelegateList.DataSource as DataTable;//this is coming     null 

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

       grdDelegateList.DataSource = dataView; 
       grdDelegateList.DataBind(); 
      } 
     } 

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

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

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

      return newSortDirection; 
     } 

Поскольку источник данных имеет нулевое значение, мне нужно, чтобы извлечь данные из БД снова, если да, то я выборка списка, поэтому мне нужно добавить логику cutom, чтобы сначала преобразовать список в таблицу данных или он будет работать со списком тоже. Какие-либо предложения??

ответ

0

Вы получаете нуль, потому что источник данных является списком, а не текущим в текущем сценарии. Так что было бы лучше Когда вы привязываете сетку, используйте преобразованный тип данных из списка. Остальная часть вашей логики сортировки осталась бы незатронутой.

Update:

Держите DataTable в сессии. Извлеките и восстановите сетку в процессе сортировки после сортировки данных из сеанса. Также не забудьте обновить таблицу сеанса, а также обновленное выражение сортировки. см. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sorting.aspx

+0

В списке класса есть объект другого класса, который необходим для получения информации о том, что этот класс.so datatable не будет работать ... – ankur

+0

Затем вам следует использовать листинг источника данных для списка вместо Datatable и выполнить сортировка по элементам списка. – vendettamit

+0

Я внесла изменения в код, теперь он извлекает таблицу данных, но при сортировке выражения события griddatasource по-прежнему остается нулевым. – ankur

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