Asp.net
對集合或對象列表進行數據綁定時對網格視圖進行排序
我通過以下方式設置了 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(); } }