【问题标题】:Telerik RadGrid CustomSorting without hitting database?Telerik RadGrid CustomSorting 不打数据库?
【发布时间】:2010-03-12 09:07:27
【问题描述】:

我尝试在 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.取消=真;

因为否则会发生默认排序。为什么文档和示例中都没有提到这一点?

但主要问题是 - 在 SortCommand 内部,我的 RadGrid 已经加载了所有项目。那么有什么方法可以对它们进行排序以避免命中数据库?我尝试访问“对象源,GridSortCommandEventArgs e”的各种项目属性,但所有项目都是只读的,所以我无法对它们进行排序并附加回 RadGrid。

感谢您的任何想法。

【问题讨论】:

    标签: telerik radgrid


    【解决方案1】:

    可以在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。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      这是我使用的一些代码的示例,它不会命中数据库。我将 MVC 3 与 Razor 视图引擎一起使用。注意 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(剃须刀引擎),关键是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())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        • 2014-12-27
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多