asp.net - 对对象集合或列表进行数据绑定(bind)时对 gridview 进行排序

标签 asp.net data-binding gridview sorting webforms

我按以下方式设置了 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/

相关文章:

c# - await 将 HttpContext.Current 设置为 null/prior - 无法手动设置

c# - Sitecore 使用嵌套转发器正确显示父项和子项

javascript - 如何使用javascript单击任何按钮时设置标签焦点

c# - ASP.NET MVC 模型绑定(bind)到列表中

c# - MVVM + 多级/嵌套数据绑定(bind)

ASP.NET MVC 3 数据注释 : Add validation dynamically

WPF 按钮可见性

c# - 如何在gridview中绑定(bind)变量值?

c# - 网站 gridview 无法在 azure 上的 iis 上工作

c# - asp.net 从 List<> 方法获取值