p.c*_*ell 13 asp.net sorting data-binding gridview webforms
我通过以下方式设置了GridView:
List<T>代码隐藏(我使用自己的自定义BOL)SortExpressions都设置正确)但是,我收到以下错误消息:
GridView的'myGridView'触发了事件排序,但没有处理.
让我List<T>允许排序的最佳方法是什么?
我怀疑它将与为OnSorting属性指定一个函数有关,即:
OnSorting = "MySortingMethod"
Run Code Online (Sandbox Code Playgroud)
p.c*_*ell 20
感谢您对排序的答案.我转向LINQ以帮助动态排序.由于网格知道是否要对ASC或DESC进行排序,以及哪个字段,我使用了LINQ表达式.Expression执行了排序,然后我简单地将这些结果绑定到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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31531 次 |
| 最近记录: |