Telerik RadGrid CustomSorting没有命中数据库?

时间:2010-03-12 09:07:28

标签: telerik radgrid

我试图在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。

感谢任何想法。

2 个答案:

答案 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())