我以为我可以使用事件gridInitialized一个运行循环,通过每行的id添加类'不可编辑的单元格'但是添加了类,但是当行进入编辑模式时,具有该类的单元格仍然可以编辑。
function gridInitialized() { var grid = jQuery('#enabledLanguagesGrid');
var ids = grid.getDataIDs();
for(var i = 0; i < ids.length; i++)
var id = ids[i];
if (grid.getCell(id, 'isCustom') === 'True') {
grid.setCell(id, 'name', '', 'not-editable-cell')
}
}
}
当我使用grid.editRow进入编辑模式时,名称字段仍然可以编辑。
另一方面,我没有收到trirand.net公共论坛或支持电子邮件地址的任何回复。我第一次接触他们已经8天了。还有其他人在Trirand遇到支持问题吗?
非常感谢
答案 0 :(得分:1)
请在您的所有问题中包含有关您使用(可以使用)的jqGrid版本的信息,以及有关版本&lt; free jqGrid,商业版Guriddo jqGrid JS或旧版jqGrid的信息。 = 4.7)。
重要的是要理解,jqGrid有3种可选的编辑模式:内联编辑,表单编辑和单元格编辑。类not-editable-cell
仅用于单元格编辑。您撰写了关于editRow
的文章,这是内联编辑的一部分。它支持``not-editable-row`类,可以在行上设置,以防止整行被编辑。
您的要求的实施在很大程度上取决于您的确切要求以及您使用的jqGrid版本。如果你使用free jqGrid fork,那么最简单的解决方案是我从2014年底开始开发的(在制作主叉商用并将其重命名为Guriddo jqGrid JS之后)。免费的jqGrid允许将列的editable
属性定义为回调函数。该功能在the wiki article中有所描述。回调函数有rowid
作为参数,可以获取行的数据,分析数据并返回true / false(允许或不允许编辑单元格)取决于任何自定义条件。作为回调的editable
属性是针对所有编辑模式实现的。
如果您必须使用旧版本的jqGrid,则应遵循the old answer或this one中所述的解决方案。只有直接致电editRow
,才能以简单的方式实施解决方案。间接使用editRow
(inlineNav
或formatter: "actions"
)的解决方案要复杂得多。
最后的评论。您应该尝试从不使用您发布的gridInitialized
之类的代码,因为它修改循环页面上的数据。重要的是要理解,在HTML页面上修改一个元素遵循web browser reflow。 Web浏览器必须重新计算或更改页面上所有现有元素的位置或其他属性。因此,如果修改页面上的元素,则实质上会增加代码的复杂性并降低页面的性能。我建议您阅读the old article并使用cellattr
,rowattr
和自定义格式化程序,而不是更改循环中的数据。