我使用表单编辑进行网格设置。我希望用户只能编辑一些行。首先,我认为最简单的方法是在我的服务器查询中使用一个列(可能是隐藏的)和表示用户具有的访问权限或角色的XML。所以基本上网格现在有一个“访问角色”列,每行有'Y'或'N'。 (其中Y =用户可以编辑,N =查看/只读)
我已经尝试了几件事来实现这一点。我提出的最好的是使用rowattr函数,但我的使用是有缺陷的,因为它隐藏了网格中的行(我不想隐藏它,只是readonly):
function (rd) {
console.log('Row = '+rd.WWBPITM_SURROGATE_ID);
if (rd.ACCROLE === "N") {
console.log('RowAttr '+rd.ACCROLE);
return {"style": "display:none"};
}
这可能是一个开始,但我不知道从哪里开始,我不确定我是否正在使用rowattr咆哮错误的树。
我也尝试在loadComplete函数中使用setCell,如下所示:
function GridComplete() {
var grid = $('#list1');
var rowids = grid.getDataIDs();
var columnModels = grid.getGridParam().colModel;
console.log('Check ACCROLE');
// check each visible row
for (var i = 0; i < rowids.length; i++) {
var rowid = rowids[i];
var data = grid.getRowData(rowid);
console.log('ACCROLE for '+rowid+' is '+data.ACCROLE);
if (data.ACCROLE == 'N') { // view only
// check each column
//console.log(data);
for (var j = 0; j < columnModels.length; j++) {
var model = columnModels[j];
if (model.editable) {
console.log('Is Editable? '+model.editable);
//grid.setCell(rowid, model.name, '', 'not-editable-cell', {editable: false, edithidden: true});
grid.setCell(rowid, model.name, '', 'not-editable-cell', {editoptions: { readonly: 'readonly', disabled: 'disabled' }});
}
}
}
}
}
但编辑选项似乎对此没有任何作用。
任何想法如何做到这一点?
答案 0 :(得分:1)
好的,谢谢你解释表格编辑。以下是如何使用表单编辑阻止对jqGrid的某些记录进行编辑的示例:
用示例替换$ grid.jqGrid(&#34; navGrid&#34;,&#34;#pager&#34;,...):
$grid.jqGrid("navGrid", "#pager", {view: true},
// Events for edit
{
beforeInitData: function (formid) {
var selectedRow = jQuery("#list").jqGrid('getGridParam','selrow'); //get selected rows
var selectedClient = $("#list").jqGrid('getCell', selectedRow, 'name');
if(selectedClient == 'test2')
{
alert('You are not allowed to edit records for client "' + selectedClient + '"');
return false;
}
}
},
// Events for add
{
beforeShowForm: function (formid) {
}
}
);
答案 1 :(得分:0)
您没有提供有关如何更新行的大量信息(JQGrid网页演示中描述了各种方法,但我猜测了可能的解决方案。我从底部的示例开始这个页面(trirand的网站wiki for inline_editing)http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing并进行了一些更改。
这是回调:
onSelectRow: function(id){
var row = $(this).getLocalRow(id);
if(id && id!==lastsel2){
jQuery('#rowed5').restoreRow(lastsel2);
if(row['securityGroup'] == 'A') {
jQuery('#rowed5').editRow(id,true);
}
lastsel2=id;
}
},
如果此方法不适合您,请提供有关您目前如何使用jqGrid进行编辑的详细信息。这个例子显然非常简单,甚至不会发布到PHP或mysql或任何东西。
答案 2 :(得分:0)
如果它对其他人有帮助,以下是我在表单编辑模式下实现只读行的方式,基于一个列,该列指定用户对每行的访问级别:
在editoptions中,使用beforeShowForm事件,如下所示:
beforeShowForm: function (formid) {
console.log('Checking for READONLY '+formid.name);
var selectedRow = jQuery("#list1").jqGrid('getGridParam','selrow'); //get selected rows
var selRole = $("#list1").jqGrid('getCell', selectedRow, 'ACCROLE');
if(selRole == 'N' || selRole == 'S' || selRole == 'R')
{
//$("<div>Sorry, you do not have access to edit this record.</div>").dialog({title: "Access Denied"});
formid.find("input,select,textarea")
.prop("readonly", "readonly")
.addClass("ui-state-disabled")
.closest(".DataTD")
.prev(".CaptionTD")
.prop("disabled", true)
.addClass("ui-state-disabled");
formid.parent().find('#sData').hide();
var title=$(".ui-jqdialog-title","#edithd"+"list1").html();
title+=' - READONLY VIEW';
$(".ui-jqdialog-title","#edithd"+"list1").html(title);
formid.prepend('<span style="color: Red; font-size: 1em; font-weight: bold;">You viewing READONLY data.</span>');
}