【问题标题】:kendo grid shared data source剑道网格共享数据源
【发布时间】:2016-11-14 08:56:41
【问题描述】:

这是我的主网格。在行动中,我去数据库并获取所有数据。我想放置另一个使用相同数据类型的网格。这个网格将使用与我指定的过滤器相同的数据源。我不想再去数据库了。 例如 Grid1:显示所有数据 Grid2:显示 OrderAmount>100

(Html.Kendo().Grid<CustomerOrder>()
.Name("Orders")
.Events(events => events.DataBound("onDataBound"))
.DataSource(dataSource => dataSource   
    .Ajax()
    .ServerOperation(false)
    .Read(read => read.Action("OrderListAjax", controller))
    .PageSize(Constants.PageSize)
.Columns(columns =>
                           {                                 
                               columns.Bound(p => p.CustomerNumber).Title("CustomerNumber");
                               columns.Bound(p => p.CustomerName).Title("CustomerName");
                               columns.Bound(p => p.OrderAmount).Title("OrderAmount");   
                           })        
    )

【问题讨论】:

  • 请注意,model-view-controller 标签是针对有关模式的问题。 ASP.NET-MVC 实现有一个特定的标记。

标签: kendo-ui grid datasource


【解决方案1】:

我在下面尝试了一种不同的方法,它也有效。

    // Take the data source from main grid
    var mainSource = $("#Orders").data("kendoGrid").dataSource.data().toJSON();

   // Prepare your query on main grid source
    var orderAmountQuery = kendo.data.Query.process(mainSource, {
        filter: {
            logic: "and",
            filters: [               
            {
                field: "OrderAmount",
                value: parseInt("100"),
                operator: "gt" // greater than
            }
            ]
        }
    });

    // Create a new datasource for set filtered datasource
    var orderAmountQueryDataSource = new kendo.data.DataSource({
        pageSize: 15,
    });
    orderAmountQueryDataSource.data(orderAmountQuery.data);


    // set grid2's data source with filtered dataSource
    var grid2 = $("#Grid2").data("kendoGrid");
    grid2.setDataSource(orderAmountQueryDataSource);

【讨论】:

    【解决方案2】:

    你的主要答案在这里:

    is it possible to copy a grid datasource to a new datasource, a new datasource that loads all data?

    但是对于你需要进行过滤的情况,你可以使用这个:

    在 CSHTML 中添加第二个网格:

    <div id="MySecondGrid"></div>
    

    使用以下 Javascript:

    // Get the first datasource
    var ds1 = $("#Orders").data("kendoGrid").dataSource;
    
    // Filter the second datasource
    var ds2 = $.grep(ds1._data, function (item) { return item.OrderAmount > 100; });
    ds2.serverPaging = false;
    
    // Set the second datasource
    $("#MySecondGrid").kendoGrid({
        dataSource: ds2
    });
    

    【讨论】:

    • 对于答案的第一部分,我想对问题发表评论,但我还没有足够的声誉来评论这些问题。
    猜你喜欢
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2013-07-17
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多