如何在jqGrid MVC版本中动态地使单元格可编辑



我想我可以使用事件网格初始化一个运行循环,通过每行的 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天了。还有其他人在特里兰德遇到支持问题吗?

非常感谢

请在您的所有问题中包含有关您使用(可以使用)的jqGrid版本以及分叉(免费jqGrid,商业Guriddo jqGrid JS或版本<=4.7)中的旧jqGrid)的信息。

重要的是要了解,jqGrid 有 3 种替代编辑模式:内联编辑、表单编辑和单元格编辑。类not-editable-cell将仅用于单元格编辑。你写了关于editRow的文章,这是内联编辑的一部分。它支持"不可编辑行"类,可以在行设置该类以防止整行可编辑。

需求的实现在很大程度上取决于您的确切需求和您使用的 jqGrid 版本。如果你使用免费的jqGrid fork,最简单的解决方案是存在的,我从2014年底开始开发(在将主分支商业化并将其重命名为Guriddo jqGrid JS之后)。免费的jqGrid允许将列editable属性定义为回调函数。维基文章中介绍了该功能。回调函数以rowid作为参数,可以获取行的数据,分析数据并返回true/false(允许或不允许编辑单元格)取决于任何自定义条件。作为回调的editable属性为所有编辑模式实现。

如果您必须使用旧版本的 jqGrid,那么您应该遵循旧答案或本答案中描述的解决方案。仅当直接调用editRow时,才能以简单的方式实现解决方案。间接使用editRow(按inlineNavformatter: "actions")的解决方案要复杂得多。

最后一句话。您应该尽量不要使用您发布的gridInitialized之类的代码,因为它会在循环中修改页面上的数据。重要的是要理解,在 HTML 页面上修改一个元素是在 Web 浏览器重排之后进行的。Web 浏览器必须重新计算或更改页面上所有现有元素的位置或其他属性。因此,如果您修改页面上的元素,则实际上会增加代码的复杂性并降低页面的性能。我建议您阅读旧文章并使用cellattrrowattr和自定义格式化程序,而不是更改循环中的数据。

最新更新