Asp.net

對集合或對象列表進行數據綁定時對網格視圖進行排序

  • May 23, 2013

我通過以下方式設置了 GridView:

  • 綁定到List<T>程式碼隱藏(我使用自己的自定義 BOL)
  • HTML 頁面上沒有 DataSource 對象
  • 可在我選擇的每一列上排序(SortExpressions 都設置正確)

但是,我收到以下錯誤消息:

GridView ‘myGridView’ 觸發了未處理的事件排序。

讓我List<T>允許排序的最佳方法是什麼?

我懷疑它與為OnSorting屬性指定一個函式有關,即:

OnSorting = "MySortingMethod"

感謝您對排序的回答。我求助於 LINQ 來幫助進行動態排序。由於網格知道是按 ASC 還是 DESC 排序,以及哪個欄位,所以我使用了 LINQ 表達式。表達式執行排序,然後我簡單地將這些結果綁定到我的網格視圖。

我懷疑 jQuery 方法會更快,並且不需要完整的回發。

using System.Linq.Expressions;

public SortDirection GridViewSortDirection
{
   get
   {
       if (ViewState["sortDirection"] == null)
           ViewState["sortDirection"] = SortDirection.Ascending;

       return (SortDirection)ViewState["sortDirection"];
   }
   set { ViewState["sortDirection"] = value; }
}

protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
   //re-run the query, use linq to sort the objects based on the arg.
   //perform a search using the constraints given 
   //you could have this saved in Session, rather than requerying your datastore
   List<T> myGridResults = PerfomSearch();


   if (myGridResults != null)
   {
       var param = Expression.Parameter(typeof(T), e.SortExpression);
       var sortExpression = Expression.Lambda<Func<T, object>>(Expression.Convert(Expression.Property(param, e.SortExpression), typeof(object)), param);


       if (GridViewSortDirection == SortDirection.Ascending)
       {
           myGridView.DataSource = myGridResults.AsQueryable<T>().OrderBy(sortExpression);
           GridViewSortDirection = SortDirection.Descending;
       }
       else
       {
           myGridView.DataSource = myGridResults.AsQueryable<T>().OrderByDescending(sortExpression);
           GridViewSortDirection = SortDirection.Ascending;
       };


       myGridView.DataBind();
   }
}

引用自:https://stackoverflow.com/questions/617088