Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kendo ui 每次页面更改和排序时都会触发剑道网格的数据绑定事件_Kendo Ui_Kendo Grid_Kendo Asp.net Mvc_Kendo Datasource - Fatal编程技术网

Kendo ui 每次页面更改和排序时都会触发剑道网格的数据绑定事件

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支持人员的建议,我在

我正在使用MVC剑道网格,我正在尝试将“全选/取消选择”复选框添加到标题中。我有javascript,它执行选择和取消选择所有单个复选框的逻辑。 我还希望根据行中的复选框选择/取消选择标题复选框。由于在网格初始化期间,网格行是未知的,因此我们无法将单击事件附加到行中的各个复选框。在数据绑定到网格之后,我们必须这样做。我还希望在用户浏览页面或进行排序时保持复选框的状态。因此,分页和排序是在客户端完成的。服务器操作设置为false javascript工作正常。根据telerik支持人员的建议,我在网格的数据绑定事件中调用此javascript。 但是,每次页面更改和排序时都会触发数据绑定事件。根据文档,当小部件绑定到数据源时,它应该被触发。 所以我尝试了dataSource的requestEnd事件,但每次页面更改和排序时都会触发requestEnd事件。同样,根据文档,它应该只在远程服务请求完成时被触发

那么,我应该使用哪个事件来调用javascript,以便javascript只执行一次,或者是否有其他方法来执行

$(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.
    }
}