我试图在Telerik论坛上发帖,但现在每次我尝试打开我的帖子时,我都会 “糟糕! 看来我们的服务器出了问题。“ 所以我在这里发布了这个问题。
我是Telerik和RadGrid的新手。我正在尝试修改现有项目,因为客户端需要自定义排序。有一个数据字段可能包含数字或文本,因此它是一个字符串类型,但有时它必须按数字排序。所以我去了这个链接:
http://demos.telerik.com/aspnet-ajax/grid/examples/programming/sort/defaultcs.aspx
和 http://www.telerik.com/help/aspnet-ajax/grdapplycustomsortcriteria.html
例子说:
“打开自定义排序后,RadGrid将显示排序图标,但实际上不会对数据进行排序。” 但似乎仅仅添加AllowCustomSorting来禁用默认排序是不够的。
实施SortCommand时,我注意到我必须这样做 e.Canceled = true;
因为发生了默认排序。为什么在文档和示例中没有提到这一点?
但主要问题是 - 在SortCommand内部,我的RadGrid已经加载了所有项目。那么有没有办法对它们进行排序以避免命中数据库?我尝试访问“对象源,GridSortCommandEventArgs e”的各种Items属性,但所有Items都是只读的,所以我无法对它们进行排序并附加回RadGrid。
感谢任何想法。
答案 0 :(得分:0)
您可以在objectDatasource的OnSelecting事件中设置sortExpression,并在SelectMethod中使用它。
protected void odsGridData_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["filterExpression"] = grdMyTasks.MasterTableView.FilterExpression;
//Set the Sort Expression and use this in the Get method
e.InputParameters["sortExpression"] = grdMyTasks.MasterTableView.SortExpressions.GetSortString();
e.Arguments.StartRowIndex = grdMyTasks.CurrentPageIndex;
e.Arguments.MaximumRows = grdMyTasks.PageSize;
}
这样您就可以执行自定义排序并将数据传递给RadGrid。
希望这有帮助。
答案 1 :(得分:0)
以下是我使用的一些代码未运行数据库的示例。我正在使用带有Razor视图引擎的MVC 3。请注意 Ajax 绑定。不要忘记使用Telerik.Web.Mvc.UI添加并使用[GridResult]注释控制器中的“Post”方法,并返回GridModel以获取Json结果集。
using Telerik.Web.Mvc;
[GridAction]
public ActionResult AjaxGridSelect()
{
return View(new GridModel(db.lm_m_category));
}
这是index.cshtml(razor引擎),关键是Ajax绑定。
@model IEnumerable<LinkManagerAdmin.Dal.lm_r_category>
@using Telerik.Web.Mvc.UI
@(Html.Telerik().Grid(Model)
.Name("Grid")
.DataKeys(keys => keys.Add(c => c.category_id ))
.DataBinding(dataBinding => dataBinding.Ajax()
.Select("AjaxGridSelect", "CategoryTree")
.Insert("GridInsert", "CategoryTree", new { GridEditMode.PopUp, GridButtonType.ImageAndText })
.Update("GridUpdate", "CategoryTree", new { GridEditMode.InLine, GridButtonType.ImageAndText })
.Delete("GridDelete", "CategoryTree", new { GridEditMode.InLine, GridButtonType.ImageAndText }))
.Columns(columns =>
{
columns.Bound(p => p.category_name).Width(150);
columns.Bound(p => p.status_cd).Width(100);
columns.Command(commands =>
{
commands.Edit().ButtonType(GridButtonType.ImageAndText);
commands.Delete().ButtonType(GridButtonType.ImageAndText);
}).Width(180).Title("Commands");
})
.Editable(editing => editing.Mode(GridEditMode.InLine))
.Pageable(paging => paging.PageSize(50)
.Style(GridPagerStyles.NextPreviousAndNumeric)
.Position(GridPagerPosition.Bottom))
.Sortable(o => o.OrderBy(sortcol =>
{
sortcol.Add(a => a.category_name);
sortcol.Add(a => a.add_date);
})
.Filterable()
.Groupable()
.Selectable())