如何用新数据刷新剑道网格

Posted

技术标签:

【中文标题】如何用新数据刷新剑道网格【英文标题】:How to refresh kendo grid with new data 【发布时间】:2017-02-24 08:50:06 【问题描述】:

加载剑道网格后,我想通过单击按钮来刷新/重新加载带有新数据的网格。

控制器:

    using Kendo.Mvc;
    using Kendo.Mvc.Extensions;
    using Kendo.Mvc.Infrastructure;
    using Kendo.Mvc.UI;

    public ActionResult FollowUpGrid_Read([DataSourceRequest]DataSourceRequest request, string name, string id)

List<vmFollowUpGrid> FUPList = new List<vmFollowUpGrid>();
FUPList = (from u in db.usrUserBldgLists 
                join e in db.entEntities on u.EntID equals e.EntID
                join d in db.entDistricts on e.FANo equals d.DistNo
                join ed in db.entDistricts on e.OANo equals ed.DistNo
                join b in db.entBuildings on e.OBNo equals b.BuildNo
                where u.UserID == "A1036719" && u.FANO == id
                select new vmFollowUpGrid  FANo = u.FANO, FAName = d.DistrictName, OANo = u.OANO, District = ed.DistrictName, OBNo = u.OBNo, Building = b.BuildName).Take(50).ToList();
var FUList = FUPList.ToDataSourceResult(request);
return Json(FUList, JsonRequestBehavior.AllowGet);                         
 

cshtml页面:

        @(Html.Kendo().Grid<MDEFollowUp.Models.vmFollowUpGrid>()
.Name("FollowUpGrid")
.Columns(columns =>

    columns.Bound(p => p.FANo);
    columns.Bound(p => p.FAName);
    columns.Bound(p => p.OANo);
    columns.Bound(p => p.District);
    columns.Bound(p => p.OBNo);
    columns.Bound(p => p.Building);
)
   .Pageable(pageable => pageable
            .Refresh(true)
            .PageSizes(true)
            .ButtonCount(5))
    .Sortable()
    .Scrollable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
                .Read(read => read.Action("FollowUpGrid_Read", "FollowUp").Data("additionalAgencyInfo")))
        ) 

然后是一个按钮单击事件以使用新数据刷新网格,但这似乎无法识别网格分配。

            $("#btnclick").click(function () 

        var grid = $("#FollowUpGrid").data("tGrid");
        var params = 
            name: "Agency",
            id: "63190"
        ;
        var dataSource = new kendo.data.DataSource( data: params );
        //grid.rebind(params);
        grid.setDataSource(dataSource);
    )

我应该如何分配按钮中的网格来完成这个?

【问题讨论】:

【参考方案1】:

在所描述的场景中有两个主要任务需要处理:

    dataSource.data 应该指向一个数组,而不是一个对象 如果新数据包含完全不同的字段,您还需要替换 Grid 列

设置新数据源和新列的一种可能方法是通过setOptions

这是一个例子:

http://dojo.telerik.com/oWahO

更新

如果重新加载数据后列保持不变,则可以使用以下方法:

$("#btnclick").click(function () 
    var grid = $("#FollowUpGrid").data("tGrid");
    var params = 
        name: "Agency",
        id: "63190"
    ;
    grid.dataSource.read(params);
)

这会将nameid 参数传递给操作方法,并保留现有的DataSource 实例及其设置。

http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#methods-read

【讨论】:

我试图做的不是更改网格列,而是根据新参数更改数据。正如上面的示例所指出的,我希望在单击按钮时将 id 值作为新参数传递。这将如何传递给事件以使用基于 6319 的 id 的新数据刷新网格?

以上是关于如何用新数据刷新剑道网格的主要内容,如果未能解决你的问题,请参考以下文章

刷新剑道网格,选择框

更改数据源时如何刷新剑道网格

剑道网格刷新(数据绑定两次)

剑道网格破坏命令不刷新网格

剑道数据源刷新

移动中的剑道网格刷新问题