2012-04-04 78 views
3

Helo, 我正在开发ASP.NET MVC 3应用程序。ASP.NET MVC 3使用升序,降序选项自定义排序WebGrid

我有一个观点

var grid = new WebGrid(rowsPerPage: 10, ajaxUpdateContainerId: "GridDiv",canPage: true,canSort: true); 
grid.Bind(source: Model); 
grid.Pager(WebGridPagerModes.All); 
@grid.GetHtml(htmlAttributes: new { id="grid" }, 
    columns: grid.Columns(
    grid.Column("Name"), 
    grid.Column("Age"), 
    grid.Column("Sex") 
) 

在控制器我有一个自定义排序算法对数据进行排序。 我有一个自定义升序排序和自定义降序排序。

我希望当用户点击列标题来按照我自定义的排序算法对行进行排序而不是在一个版本中进行排序。

对于我尝试以下(我走“sortdir”,并相应地处理它)

控制器

public ActionResult Persons(string sortdir) 
{  
    PersonsListModel = GetAllPersonsList(); 
    if(sortdir=="ASC") 
     return View(MyAscendingCustomSortAlgorithm(PersonsListModel)); 
    else 
     return View(MyDescendingCustomSortAlgorithm(PersonsListModel)); 
} 

MyAscendingCustomSortAlgorithmMyDescendingCustomSortAlgorithm是返回我的自定义算法排序列表功能。

当页面加载列表排序正确,但是当我点击标题的排序是乱了up.I调试,一切工作正常。

我的问题是我怎么能作出这样的工作,并且仍然保持正确的寻呼

我也试着设置canSort: false但我不能在标题点击了。

非常感谢您的任何帮助

+0

http://stackoverflow.com/questions/5413069/header-format-for-webgrid这应该有助于初学者:) – Yasser 2012-04-09 06:45:52

回答

1

你应该寻找这样:

  1. 禁用排序
  2. 添加自定义风格的列标题(:在.GetHtml“headerStyle customStyle” html属性)。检查章Styling your grid
  3. 使用jQuery一个现场点击处理程序添加到所有元素与这种风格,而当用户点击然后检查它是塔,并相应地张贴到你的控制器,这将刷新页面

另外,你可以在CSS中添加一些链接到你的customStype的样式,例如“cursor:hand”,这样用户就可以看到标题是可点击的。

1

我会为您的方法参数添加页码,行数,排序列和排序方向。它也应该只返回json数据。您应该在JavaScript中处理这些数据以更新您的视图。

您可以将自己的排序css类添加到标题并链接到ajax操作。它可能会解决你的网格在JavaScript中,只是改变数据行。

public JsonResult Persons(int pagenumber,int rows, string sortcol, string sortdir) 
{  

if(sortdir=="ASC") 
    return DataSource(pagenumber,rows,sortcol,MyAscendingCustomSortAlgorithm); 
else 
    return DataSource(pagenumber,rows,sortcol,MyDescendingCustomSortAlgorithm); 

} 

你可以通过你的排序功能,为数据源调用并用它来返回JSON数据。您可以使用linq查询来排列

2

您是否尝试关闭Bind()方法中的autoSortAndPage参数?

grid.Bind(source: Model, autoSortAndPage : false); 

我知道你想保持现有的呼叫,但我不知道有办法兼得。您可能需要在您的操作方法中手动进行分页。