我想我可以使用事件 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 公共(public)论坛或支持电子邮件地址上收到任何回复。距离我第一次接触他们已经过去了8天。还有其他人在 Trirand 的支持方面遇到问题吗?
非常感谢
最佳答案
请在您的所有问题中包含有关您使用(可以使用)的 jqGrid 版本以及有关 fork 的信息( free jqGrid ,商业 Guriddo jqGrid JS 或版本 <=4.7 的旧 jqGrid)。
重要的是要了解,jqGrid 有 3 种替代编辑模式:内联编辑、表单编辑和单元格编辑。 not-editable-cell
类仅用于单元格编辑。您写了有关 editRow
的文章,它是内联编辑的一部分。它支持“not-editable-row”类,可以在行上设置该类以防止整行可编辑。
您的要求的实现很大程度上取决于您的具体要求以及您使用的 jqGrid 版本。如果您使用free jqGrid,则存在最简单的解决方案fork,我从 2014 年底开始开发(在将主 fork 商业化并将其重命名为 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
和自定义格式化程序,而不是更改循环中的数据。
关于javascript - 如何在jqGrid MVC版本中动态使单元格可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42920011/