我正在使用基于州或省分组的jqGrid.组内的每一行都有一个复选框.我需要在组头中放置一个复选框,允许用户选择/取消选择该组中的所有行复选框.
在查看jqGrid生成的HTML时,我看不到任何与组内行相关的类或ID.我也没有看到使用列选项或分组配置添加此类的方法.
有什么建议?
最佳答案 我们已经用子网格解决了同样的问题,并且该解决方案可以适用于分组场景.我们使用
custom formatters为标题链接/复选框和子网格复选框添加样式和数据属性.然后我们在标题行中有一个链接或复选框,其上有一个事件,它使用jQuery选择子网格中具有相应数据属性和样式的所有复选框.最后,grid load complete事件为“check all”链接添加了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;
}
这是加载完成事件,它连接上述格式化程序中创建的“检查所有”链接的单击事件.
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抓取数据本身并吞下实际的数据对象,这使得很难或不可能直接获取数据以供参考或处理.但是,创建和管理客户端模型/视图分离并非易事.所以这可以作为一种快速替代方案.但要注意,因为这可能会失控.