我按以下方式设置了 GridView:
- 绑定(bind)到
List<T>
在代码隐藏中(我正在使用我自己的自定义 BOL) - HTML 页面上没有数据源对象
- 可对我选择的每一列进行排序(
SortExpression
均设置正确)
但是,我收到以下错误消息:
The GridView 'myGridView' fired event Sorting which wasn't handled.
获取 List<T>
的最佳方式是什么?允许排序?
我怀疑这与为OnSorting
指定一个函数有关。属性,即:
OnSorting = "MySortingMethod"
最佳答案
感谢您对排序的回答。我求助于 LINQ 来帮助动态排序。由于网格知道是否对 ASC 或 DESC 进行排序以及对哪个字段进行排序,因此我使用了 LINQ 表达式。表达式执行排序,然后我只需将这些结果绑定(bind)到我的 GridView 。
我怀疑 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();
}
}
关于asp.net - 对对象集合或列表进行数据绑定(bind)时对 gridview 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617088/