我的数据源使用控制器方法(ASP MVC)抓取行。我需要设置一些东西,这样用户就不能从网格中删除所有行,所以当单击 gris id 中最后一行的删除按钮时,它需要意识到它是最后一行,然后说不。我一直在尝试使用 DataSource.Total() 方法,这是我目前所处的位置:
$("#location-list").kendoGrid({
dataSource: ds_locationsList,
sortable: true,
height: "150px",
width: "300px",
editable: "inline",
columns: [{
field: "LocationName", title: "Trespassed Location(s)"
}, {
command: [{
name: "destroy",
text: "Delete",
click: function(){
var rowCount = ds_locationsList.total();
if (rowCount < 1) {
$("#dialog").dialog({
modal: true,
buttons: {
Ok: function () {
$(this).dialog("close");
}
}
});
return false;
}
}
}],
width: "110px"
}]
});
这不起作用,我想我需要从销毁函数之外获取 rowCount,也许是在某种“afterLoad”中。我也试过在外面做这一切,但在这两种情况下都没有发生:
$(".k-grid-delete").on("click", function () {
var rowCount = ds_locationsList.total();
if (rowCount < 1) {
$("#loclistval").removeClass("hidden");
return false;
}
});
有没有人必须这样做?有什么建议么?
=================================编辑================= ======================
如下所述,我尝试了自定义删除功能,但它只从客户端删除。我尝试了调试,但我在删除函数中放置的断点从未被命中,所以我一定是搞砸了调用。这是我的运输代码:
transport: {
read: {
url: '@Url.Action("JsonPopulateTrespassList", "TrespassOrder")/' + PersId,
dataType: 'json',
type: "POST"
},
destroy: {
url: '@Url.Action("JsonDeleteLocation", "TrespassOrder")',
dataType: 'json',
type: "POST"
}
},
和我的参数图:
parameterMap: function (options, operation) {
if (operation == "destroy" && options.models) {
var values = {};
values["TrespassLocId"] = options.models[0].TrespassLocId;
return values;
}
},
自定义删除:
function locDelete(e) {
var len = this.dataSource.data().length;
if (len === 1) {
alert("There must be at least one location.");
}
else {
this.removeRow($(e.target).closest("tr"));
}
}
和网格代码:
$("#trespassed-location-list").kendoGrid({
dataSource: ds_locationsList,
sortable: true,
height: "150px",
width: "300px",
editable: "incell",
columns: [{
field: "LocationName", title: "Trespassed Location(s)"
}, {
command: [{ name: "destroy", text: "Delete", click: locDelete }],
width: "110px",
}]
});
所以它从客户端删除了行,而不是服务器端。但是当我尝试调试时,locDelete 函数上的断点永远不会被命中,所以我确定发生了什么。