18

我已经使用剑道 ui 工具开发了一个 Web 应用程序,并且有一个具有批量编辑模式的剑道网格..

但是当我按下剑道网格中任何记录的删除按钮时,它将从网格列表中删除,但实际上不在数据源中。当我重新加载页面或网格时,删除的项目仍然存在。

这是我的网格的代码

<div id="grid">
        </div>
        <script type="text/javascript">

            $("#submitMarketUser").click(function () {
                var grid = $("#grid").data("kendoGrid");
                var dataSource = new kendo.data.DataSource({
                    transport: {
                        read: {
                            url: "WholeSaleTrade/GetTradeProductDetail",
                            dataType: "json",
                            data: {
                                test: $("#Names").val()
                            }
                        },
                        destroy: {
                            url: "WholeSaleTrade/DeletePro",
                            type: "POST",
                            dataType: "jsonp",
                            data: {
                                DAKy: $("#Names").val(),
                                DIKy: $("#btntxt").val()
                            }
                        },
                        create: {
                            url: "WholeSaleTrade/CreateProduct",
                            type: "POST",
                            dataType: "jsonp",
                            data: {
                                AKy: $("#Names").val(),
                                IKy: $("#btntxt").val()
                            }
                        }
                    },
                    pageSize: 5,
                    schema: {
                        model: {
                            id: "ProductKey",
                            fields: {
                                ProductKey: { editable: false, nullable: true },
                                ProductName: { validation: { required: true} }
                            }
                        }
                    }
                });
                $("#grid").kendoGrid({
                    dataSource: dataSource,
                    editable: true,
                    toolbar: ["create", "save"],
                    autobind: true,
                    pageable: true,
                    columns: [
                        { field: "ProductName", title: "Product Name",
                            editor: function (container, options) {
                                var model = options.model;
                                $('<input id="btntxt" name="' + options.field + '"/>').appendTo(container).kendoComboBox({
                                    dataSource: {
                                        type: "POST",
                                        transport: {
                                            read: {
                                                url: "MarketInformation/PopulateProducts",
                                                success: function (data) {
                                                    var prod = data[0];
                                                    model.set("ProductName", prod.ItmNm);
                                                    model.set("ItmKy", prod.ItmKy);
                                                    model.set("UserKey", $("#Names").val());
                                                }
                                            }
                                        }
                                    },

                                    dataValueField: "ItmKy",
                                    dataTextField: "ItmNm"
                                });
                            }
                        },
                        { command: ["destroy"], title: "&nbsp;" }
                    ]
                });
            });

        </script>

无法确定故障在哪里,有人可以帮我解决这个问题。

4

5 回答 5

44

删除不起作用的三个常见原因:


1.没有将网格设置editable为或。删除的项目将通过传输销毁自动处理,仅适用于“内联”/“弹出”编辑模式。前任:inlinepopup

editable: {
   mode: "inline",
}
//or
editable: "inline"


2.如果在您的数据源上,您将batch标志设置为true,这意味着数据源只有在您告诉它之后才会进行调用,例如调用sync()。前任:

var dataSource = new kendo.data.DataSource({
    batch: true,
    //.....
});
//... in some where e.g in a save button click event call the following line:
dataSource.sync();


3.您应该在 datasource 中定义数据库字段id名称的主键。前任:model

   model: {
        id: "ProductID",
        fields: {
            ProductID: { editable: false, nullable: true },
        }
    }


所以你的代码的问题是第一个,即你没有editable设置inlinepopup

于 2014-01-30T08:05:39.780 回答
3

如果您选择不包含editable.mode以使用单元内编辑,您可以设置toolbar网格以包含选项save

$("#grid").kendoGrid({
    dataSource: {
        transport: {
            ....
        },
        schema: {
            ....
        }
    },                        
    toolbar: ["create", "save", "cancel"],
    columns: [
        ....
    ],
    editable: true
});

这将在网格的工具栏上创建一个save按钮。通过单击destroy命令按钮删除任何记录后,单击该save按钮使网格向服务器发出 Ajax 调用以删除记录。

如果您希望在不包含save按钮的情况下自动删除记录,您可以在网格中添加一个change事件处理程序:datasource

$("#grid").kendoGrid({
    dataSource: {
        transport: {
            ....
        },
        schema: {
            ....
        },
        change: function(e) {
            if (e.action === "remove") {
                this.sync();
            }
        }
    },                        
    columns: [
        ....
    ],
    editable: true
});

当有数据更改时,这将自动将您对网格所做的更改与服务器同步。

于 2015-05-23T13:36:24.860 回答
0

我遇到过同样的问题。我的问题是由data剑道模型中的属性引起的。例子:

{id: 1, data: ""}
于 2015-01-06T20:19:10.327 回答
0

我在服务器 Delete Method 上为 int 设置了一个任意名称。

    [HttpPost]
    public ActionResult DeleteRandomTest(Int32 randomTestId)
    {
         ...
    }

默认的模型绑定器可能正在寻找一个名为 Id 的属性(根据模型的配置,与我的类型的主键相同)。

 .Model(config => config.Id(p => p.Id))

事实上,我通过将签名更改为以下内容来证明这一点:

    [HttpPost]
    public ActionResult DeleteRandomTest(Int32 Id)
    {
        ...
    }

在那之后我的断点被击中。

最终,我使用完整类型作为参数,如 Kendo 示例中所示,因为我不想在动作中使用名称不佳的参数名称(不是驼峰式大小写)。如下图所示:

    [HttpPost]
    public ActionResult DeleteRandomTest([DataSourceRequest]
         DataSourceRequest request, RandomDrugTest randomDrugTest)
    {
       ...
    }

这似乎是它不起作用的原因。

于 2014-07-01T10:29:29.547 回答
0

嗯,尝试不包括type: "POST",,看看它现在是否有效,因为据我所知,演示中没有包含该位,而且我认为我上次进行内联编辑/删除时没有包括它。

于 2013-07-11T12:24:53.263 回答