Kendo ui 每次页面更改和排序时都会触发剑道网格的数据绑定事件
我正在使用MVC剑道网格,我正在尝试将“全选/取消选择”复选框添加到标题中。我有javascript,它执行选择和取消选择所有单个复选框的逻辑。 我还希望根据行中的复选框选择/取消选择标题复选框。由于在网格初始化期间,网格行是未知的,因此我们无法将单击事件附加到行中的各个复选框。在数据绑定到网格之后,我们必须这样做。我还希望在用户浏览页面或进行排序时保持复选框的状态。因此,分页和排序是在客户端完成的。服务器操作设置为false javascript工作正常。根据telerik支持人员的建议,我在网格的数据绑定事件中调用此javascript。 但是,每次页面更改和排序时都会触发数据绑定事件。根据文档,当小部件绑定到数据源时,它应该被触发。 所以我尝试了dataSource的requestEnd事件,但每次页面更改和排序时都会触发requestEnd事件。同样,根据文档,它应该只在远程服务请求完成时被触发 那么,我应该使用哪个事件来调用javascript,以便javascript只执行一次,或者是否有其他方法来执行Kendo ui 每次页面更改和排序时都会触发剑道网格的数据绑定事件,kendo-ui,kendo-grid,kendo-asp.net-mvc,kendo-datasource,Kendo Ui,Kendo Grid,Kendo Asp.net Mvc,Kendo Datasource,我正在使用MVC剑道网格,我正在尝试将“全选/取消选择”复选框添加到标题中。我有javascript,它执行选择和取消选择所有单个复选框的逻辑。 我还希望根据行中的复选框选择/取消选择标题复选框。由于在网格初始化期间,网格行是未知的,因此我们无法将单击事件附加到行中的各个复选框。在数据绑定到网格之后,我们必须这样做。我还希望在用户浏览页面或进行排序时保持复选框的状态。因此,分页和排序是在客户端完成的。服务器操作设置为false javascript工作正常。根据telerik支持人员的建议,我在
$(function () {
$gridElement = $("#grid");
var kendoGrid = $gridElement.data("kendoGrid");
var dataSource = kendoGrid.dataSource;
kendoGrid.bind("dataBound", function (e) {
configureSelectCheckBoxes($gridElement)
}
})
$("#btnSearch").click(function () {
kendoGrid.dataSource.read();
kendoGrid.refresh();
kendoGrid.dataSource.page(1);
})
function configureSelectCheckBoxes(grid) {
// attach click event to select all check box
grid.find("thead input:checkbox").click(
function () {
grid.find("td input:checkbox").prop("checked", $(this).prop("checked"));
});
// attach click event to individual check box
grid.find("tbody input:checkbox").click(function () {
var checkedCount = grid.find("td input:checkbox:checked").length;
var totalCount = grid.find("td input:checkbox").length;
grid.find("th input:checkbox").prop("checked", checkedCount === totalCount);
}
);
}
}
我从您的问题中了解到的是,您需要停止排序时的数据绑定事件。如果我理解正确,那么下面的技巧将对你有用 您只需检查数据源的排序,如下面的JS解决方案,即可仅显示技巧:
dataBound: function (e) {
if (e.sender.dataSource.sort() == undefined) {
// It indicates that grid is loaded first time, no sort trigger is fired.
}
}
注意:如果您已为排序设置了默认列,则需要相应地添加条件以检查该列的排序,因为该条件可能不为真。它实际上应该可以工作。您是否尝试在小部件代码中指定事件。事件=>e。OnDataBoundconfigureSelectCheckBoxes@Vanice我还没有尝试过,我将任何javascript与cshtml视图分开。所以我在WIDGET初始化之后附加了DigabyEngin in .js文件。你可以考虑它的可读性。我喜欢在查看小部件代码时看到所有事件。实际代码可以在.js文件中。你能提供小提琴或演示项目吗?
dataBound: function (e) {
if (e.sender.dataSource.sort() == undefined) {
// It indicates that grid is loaded first time, no sort trigger is fired.
}
}