2011-11-17 123 views
4

我有一种方案,我想对同一个jqgrid应用表单编辑和内联编辑。我有两个用户,例如一个ID管理员和其他用户和公司是一个jqgrid。现在我想为管理员应用表单编辑并为公司Jqgrid的用户进行内联编辑。我使用JSP脚本来指定它是Admin还是User。使用内联编辑进行表单编辑到相同的jqgrid

有谁知道我该如何能够执行此操作?

@updated:

onSelectRow: function(id){       
       var userType='<%=userDetails[1]%>'; 
       alert("userType= " + userType); 
       if(userType === 'Company Administrator'){     
         jQuery('#companyList').jqGrid('editRow',id,true,inlineEditSuccess);      
       } 
      } 

回答

1

的实施似乎我清楚。您只需在服务器端设置一个JavaScript变量,它将描述用户可以使用哪种编辑模式。你甚至可以允许一些用户编辑,而另一个不能。

如果你不想让任何一种形式的编辑对一些使用可以测试对应的变量的值,并调用navGrid取决于值:

if (my.formEditing) { 
    $("#list").jqGrid('navGrid', '#pager', ....); 
} 

,或者您可以使用

if (my.formEditingOn) { 
    $("#list").jqGrid('navGrid', '#pager', 
     {edit: my.formEditOn, add: my.formAddOn, add: my.formDelOn}, ....); 
} 

如果您要使用the answer中描述的技巧(请参阅the demo),您可以调用'navGrid'并创建所有导航按钮,但只能根据用户的权限显示所选按钮。

在在线的使用情况下编辑,你可以使用类似

onSelectRow: function (id) { 
    if (!my.inlineEditing) { 
     return; 
    } 
    //... 
    $(this).jqGrid('editRow', id, ...); 
} 

my变量的初始化可以是不同取决于你在服务器端使用的技术。在最简单的my变量可以定义为全球在页面上,因此它可以在顶层定义。在ASP.NET MVC的情况下,代码可以如下所示:

<%@ Page ... 
... 
<asp:Content ID="Content3" ContentPlaceHolderID="head" runat="server"> 

<%-- first include script which defines global my object based on the user rights --%> 
<script type="text/javascript"> 
    // initialize my based of Model properties filled 
    var my = { 
     inlineEditing : .., 
     formEditOn : ..., 
     formAddOn : ..., 
     formDelOn : ... 
    } 
</script> 

<%-- now include the main script which uses jqGrid --%> 
<script type="text/javascript" src="<%= Url.Content(scriptPath) %>"></script> 
+0

完成了。正如你指定的那样,我尝试了这种方式,因为我正在检查onSelectRow事件函数中的用户类型,因为用户类型是从JSP scriptlet即服务器端代码中取回的。请看看我的@updated代码,谢谢你的回复。 –

+0

@Bhagwat:不客气! – Oleg