【问题标题】: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】:
你有下一个选择:
- 使用客户端 (Javascript) 过滤\排序。在这种情况下,请使用一些具有此功能的控件,如 jqgrid、jgrid 等(首选)或实现您自己的。
- 服务器端。扩展您的控制器,以获取额外的字符串“order_by”和字符串“order_field”参数,并考虑这些参数重构您的数据库查询。在单击标题时添加 ajax 调用以在控制器中调用操作。(如果您的项目中有 webapi,您可以简单地将网格替换为新的,在 ajax 响应中返回)
希望这会有所帮助!
【解决方案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);
}