2015-07-22 3 views
0

Моя проблема: я не знаю, как передавать события для сортировки моего DataTable. Я перечислил страницу .aspx и поток за .cs-файлом для функции BindThrottles. Я ищу простое решение, использующее DataTable. Я видел другой код, который выглядел просто, что использовал события, которые я опубликовал в конце, но не уверен, как использовать эту форму для использования.GridObjectDataSource DataTable Сортировка с параметрами

Моя страница .aspx сконфигурирована как ..

<asp:ObjectDataSource ID="GridObjectDataSource" 
    runat="server" SelectMethod="BindThrottles"                
    TypeName="WebsiteNamespace.ThrottleInterval" 
    SortParameterName="SortBy"> 

    <SelectParameters> 
    <asp:ControlParameter ControlID="gvThrottles" 
     Name="sortDirection" PropertyName="SortDirection" /> 
    </SelectParameters> 

</asp:ObjectDataSource> 

<asp:GridView ID="gvThrottles" AllowSorting="True" runat="server" 
    DataKeyNames="UserID" DataSourceID="GridObjectDataSource" 
> 

<Columns> 
    <asp:TemplateField HeaderText="USERID" SortExpression="USERID"> 
     <ItemTemplate> 
      <asp:Label ID="lblItemUserId" runat="server" 
       Text='<%# Eval("USERID") %>'></asp:Label>    
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Requests" SortExpression="REQUESTS"> 
     <ItemTemplate> 
      <asp:Label ID="lblItemNumRequests" runat="server" 
       Text='<%# Eval("REQUESTS") %>'></asp:Label>    
     </ItemTemplate> 
</Columns> 

</asp:GridView> 

Мой метод BindThrottles настроен ...

public DataTable BindThrottles(string SortBy, int sortDirection){ 

    //..code to run queries from MongoDB 
    //..code to create columns and rows of DataTable 
    //..code to fill the rows with the data from the MongoDB 

    ************************************************************* 
    //.. I need some code here to let my DataTable sort on 
    //.. the column header link for Asc or Desc. 
    ************************************************************* 
} 

Я видел другой StackOverflow пост, который показывает код, как ...

dt.DefaultView.Sort = e.SortExpression + " " + 
    GetSortDirection(e.SortExpression); 

и GetSortDirection сконфигурирован как

public string GetSortDirection(string column) 
    { 

     // By default, set the sort direction to ascending. 
     string sortDirection = "ASC"; 

     // Retrieve the last column that was sorted. 
     string sortExpression = ViewState["SortExpression"] as string; 

     if (sortExpression != null) 
     { 
      // Check if the same column is being sorted. 
      // Otherwise, the default value can be returned. 
      if (sortExpression == column) 
      { 
       string lastDirection = ViewState["SortDirection"] as string; 
       if ((lastDirection != null) && (lastDirection == "ASC")) 
       { 
        sortDirection = "DESC"; 
       } 
      } 
     } 
     // Save new values in ViewState. 
     ViewState["SortDirection"] = sortDirection; 
     ViewState["SortExpression"] = column; 

     return sortDirection; 
    } 

Но я не знаю, как получить его в форме, которая может использовать события для сортировки внутри функции, которая уже установила параметры, которые не являются событиями, или если есть лучший способ сортировать как ASC, так и DESC по ссылке заголовка столбца.

Дополнительная информация: Я очень новичок в ASP. Я унаследовал этот проект, поэтому функция по-прежнему в настоящее время называется BindThrottles, даже я думал, что я пытаюсь устранить привязку (советы со стороны сотрудников).

ответ

0

Здесь в этой функции SortExpression - это имя столбца, а SortDirection - сортировка, т.е. (по возрастанию или по убыванию). Поскольку оба значения сохраняются в ViewState вы можете использовать его в любом event.You могут использовать эту функцию, как это:

DataView dv = new DataView(dtTable); 
    dv.Sort = columnName + " " + GetSortDirection(columnName); 
    GridView1.DataSource = dv; 
    dtTable = dv.ToTable(); 
    GridView1.DataBind(); 

Где dtTable является DataTable

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