我正在使用基于州或省进行分组的jqGrid。组中的每一行都有一个复选框。我需要在组标题中放置一个复选框,该复选框允许用户选择/取消选择该组中的所有行复选框。

在查看jqGrid生成的HTML时,在组内的行上没有看到与组相关的任何类或ID。我也看不到使用列选项或分组配置添加此类的方法。

有什么建议么?

最佳答案

我们已经使用子网格解决了相同的问题,并且该解决方案可能适用于分组方案。我们使用custom formatters为标题链接/复选框和子网格复选框添加样式和数据属性。然后,我们在标题行中具有一个链接或复选框,上面带有一个事件,该事件使用jQuery选择具有适当数据属性和样式的子网格中的所有复选框。最后,网格加载完成事件为“检查所有”链接添加了click事件处理程序。

这是subgrid复选框列的示例自定义格式化程序。请注意data-groupingId属性,该属性存储一个值,该值用于将标题行与子网格行相关联。

function checkBoxColumnFormatter(cellvalue, options, rowObject) {
    return "<input type=\"checkbox\"" + data-groupingId=\"" + rowObject.GroupingId + "\" class=\"subgridCheck\" />";
}


这是“全部选中”列的示例自定义格式化程序。请注意data-groupingId属性,该属性存储一个值,该值用于将标题行与子网格行相关联。

function checkAllColumnFormatter(cellValue, options, rowObject) {
    var link = $("<a class=\"checkAll\" href=\"#\" data-groupingId=\"" + rowObject.Id + "\">Check All</a>");

    var linkHtml = $("<div>").append(link.clone()).remove().html();

    return linkHtml;
}


这是加载完成事件,它连接了上述格式化程序中创建的“检查所有”链接的click事件。

function mainGridLoadComplete(data) {
    $(".checkAll").click(function (e) {
        checkSubGridRows(
            $(this).attr("data-groupingId")); // Use the data attribute to specify the value that will be on all the *relevant* subgrid checkboxes.
    });
},


最后,这是完成工作的方法。

function checkSubGridRows(groupingId) {
    $("#GridId .subgridCheck[data-groupingId=\"" + groupingId + "\"]").not(":disabled").each(
        function () {
            $(this).attr("checked", "checked");
        });
}


这对我们来说非常有效。考虑到所有问题,当事情变得如此复杂时,我宁愿有一个客户端模型来从JSON Web服务接收数据,并成为jqGrid的权威来源。我认为这最终将比让jqGrid本身获取数据并吞下实际的数据对象更好,这使得很难或不可能直接获取数据以供参考或处理。但是,创建和管理客户端模型/视图分离并不是一件容易的事。因此,这是一种快速的替代方法。但是要当心,因为这可能会使FAST失控。

关于jquery - 有没有一种简单的方法可以在jqGrid中选择组中的行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4402195/

10-13 05:18