4

我有一个小的剑道网格,设置如下。以一种令人难以置信的神秘方式,“添加新”的控制器操作,即BatchCreate仅当您在单击“添加新”后单击另一个命令按钮时才会调用。例如 a) 点击“Add New”,什么都没有发生。b) 重新加载页面,点击“Add New”,没有任何反应,然后点击“Save Changes”,BatchCreate最后调用该方法。

我的网格看起来像这样,几乎直接从他们的示例中复制:

@(Html.Kendo().Grid<LocationIndexItem>()
               .Name("index-grid")
               .Columns(columns =>
                            {
                                columns.Bound(p => p.Name);                                    
                                columns.Bound(p => p.IsActive).ClientTemplate(
                                    "<input type='checkbox' value='#= IsActive #' " +
                                    "# if (IsActive) { #" +
                                    "checked='checked'" +
                                    "# } #" +
                                    "/>").Width(70);
                                columns.Bound(p => p.Remarks);
                                columns.Command(cmd => cmd.Destroy());
                            })
                .ToolBar(toolbar =>
                {
                    toolbar.Create();
                    toolbar.Save();
                })
               //.Events(e => e.Edit("gridEdit"))       
               .Editable(editable => editable.Mode(GridEditMode.InCell))
               .Filterable()
               .Pageable()
               .Scrollable()
               .DataSource(dataSource => dataSource
                                     .Ajax()
                                     .ServerOperation(false)
                                     .Batch(true)
                                     .PageSize(20)
                                     .Events(events => events.Error("errorHandler"))
                                     .Model(model => model.Id(p => p.Id))
                                     .Read(read => read.Action("Read", "Location"))
                                     .Update(update => update.Action("BatchUpdate", "Location"))
                                     .Create(create => create.Action("BatchCreate", "Location"))
                                     .Destroy(destroy => destroy.Action("BatchDelete", "Location"))
                           )
)

另一个完全相同的网格,除了一个额外的字段外,效果很好。

JUST IN:使用以下代码过滤网格似乎会导致上述行为。当我注释掉注释行时,$("#ParkadeId").change()网格表现正常:

$(function() {
    $("#ParkadeId").change(function () {
        var value = $(this).val();
        var grid = $("#index-grid").data("kendoGrid");
        if (value) {
            grid.dataSource.filter({ field: "ParkadeId", operator: "eq", value: parseInt(value) });
        } else {
            grid.dataSource.filter({});
        }
    });
    //$("#ParkadeId").change();
});

在剑道网格上设置过滤器似乎会破坏添加新功能。

4

3 回答 3

5

根据 Kendo Ui 支持论坛 - 这是在客户端应用过滤/排序时的预期行为,因为在当前视图之外创建新记录时,无法对其进行编辑。

可能的解决方案是启用服务器排序/过滤或实现自定义“添加记录”按钮,该按钮首先清除数据源当前过滤器并排序,然后使用网格 API 添加新记录。

这是一个在添加新记录之前清除当前过滤器和排序的函数示例:

function createNew() {
    var grid = $("#grid").data("kendoGrid");
    grid.dataSource.filter({});
    grid.dataSource.sort({});
    //add record using Grid API
    grid.addRow();
}
于 2013-06-04T22:42:54.913 回答
0

我在剑道论坛找到了一个很好的解决方案

我所做的是创建一个零过滤器,它接受主键为零的数据(因为您刚刚添加的行以零作为其主键),并且在我需要设置自定义过滤器的任何地方我也只包含零过滤器:

var zeroFilter = {
    field: "FieldID",
    operator: "eq",
    value: 0
};

function filterData() {
    var ds = $("#Grid").data("kendoGrid").dataSource;
    ds.filter({
        logic: "or",
        filters: [
            {
                field: "MyField",
                operator: "eq",
                value: someValue
            },
            zeroFilter
        ]
    });
}
于 2013-08-23T19:06:54.440 回答
0

这可以通过自定义“创建”工具栏来完成

$("#grid").kendoGrid({
                 ...
                 toolbar: [{
                     name: "my-create",
                     text: "Add new record"
                 }],
..
)};

负载

$(".k-grid-my-create", grid.element).on("click", function(e) {
             var grid = $("#grid").data("kendoGrid");
             grid.dataSource.filter({});
             grid.dataSource.sort({});
             //add record using Grid API
             grid.addRow();
             });
于 2014-02-06T07:49:09.947 回答