【问题标题】:How to sort the order of the table by the onclick of the heading of the table using web grid in ASP.NET MVC?如何在 ASP.NET MVC 中使用 Web 网格通过单击表格标题对表格的顺序进行排序?
【发布时间】:2016-10-24 07:12:25
【问题描述】:

我想通过单击列标题(链接)对表格的顺序进行排序。代码如下,

enter image description here

控制器代码

公共 ActionResult StockStatus(int?id) { 列表数据 = 新列表(); 如果(id.HasValue) { 数据 = db.Items.Where(d => d.InStock.Value d.ItemName).ToList(); ViewBag.LesserThan = id; } 别的 { 数据 = db.Items.OrderBy(d => d.ItemName).ToList(); } 返回视图(数据); } 公共 ActionResult StockStatus(int id) { var sold = db.Sales.Include(d => d.Items).Include(d => d.Customers).Where(d => d.ItemId == id).OrderByDescending(d => d.InvoiceId)。 ThenBy(d => d.Items.ItemName).ToList(); 返回视图(已售出); }


你们中的任何人都可以帮助我吗!

【问题讨论】:

    标签: c# mysql asp.net asp.net-mvc


    【解决方案1】:

    你有下一个选择:

    1. 使用客户端 (Javascript) 过滤\排序。在这种情况下,请使用一些具有此功能的控件,如 jqgrid、jgrid 等(首选)或实现您自己的。
    2. 服务器端。扩展您的控制器,以获取额外的字符串“order_by”和字符串“order_field”参数,并考虑这些参数重构您的数据库查询。在单击标题时添加 ajax 调用以在控制器中调用操作。(如果您的项目中有 webapi,您可以简单地将网格替换为新的,在 ajax 响应中返回)

    希望这会有所帮助!

    【讨论】:

    • 我建议使用数据表。它具有对 html 表的搜索和排序功能。见datatables.net
    【解决方案2】:

    您可以使用下面的操作链接调用操作方法

    grid.Column(
      header: "Qty In stock",
      columnName: "qty",
      format: (item) => new HtmlString(Html.ActionLink(Html.ActionLink("Sort", "Sortstock", new { Id = item.idAddress,sort="fieldname"})
      ) 
    

    如果您在操作方法中获取列名,您可以对列表进行排序

       public ActionResult Sortstock(string sort= "", string sortdir="")
       {
           List<Item> stocks = Student.getStock();
           IQueryable<Item> stud = SortIQueryable<Item>(Student.getStock().AsQueryable(), sort, sortdir);
    
           return View(stud);
       }
    
    
        public static IQueryable<T> SortIQueryable<T>(IQueryable<T> data, string fieldName, string sortOrder)
        {
            if (string.IsNullOrWhiteSpace(fieldName)) return data;
            if (string.IsNullOrWhiteSpace(sortOrder)) return data;
    
            var param = Expression.Parameter(typeof(T), "i");
            Expression conversion = Expression.Convert(Expression.Property(param, fieldName), typeof(object));
            var mySortExpression = Expression.Lambda<Func<T, object>>(conversion, param);
    
            return (sortOrder == "desc") ? data.OrderByDescending(mySortExpression) : data.OrderBy(mySortExpression);
        }
    

    【讨论】:

      猜你喜欢
      • 2011-10-25
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 2018-10-27
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多