2013-05-07 41 views
0

请问我这些人,但我有这两个问题。我希望你们可以帮助我。Jqgrid获取我们输入的值,并更改表格的可编辑属性

这里是我的代码

jQuery("#VWWMODULE").jqGrid(
{ 
url:'loadstatic.php?q=2&t=CORE_VW_WMODULE', 
datatype: "json", 
mtype: "POST", 
colNames:['Id', 'From Range', 'To Range'], 
colModel: 
[ 
    { 
     name:'id', 
     index:'id', 
     width:7, 
     editable:true, 
     edittype:'text', 
     editrules:{required:true}, 
     editoptions:{maxlength:7, size:7}, 
     formoptions:{rowpos:1, elmprefix:' '}, 
     key:true 
    }, 
    { 
     name:'rangefrom', 
     index:'rangefrom', 
     width:7, 
     editable:true, 
     edittype:'text', 
     editrules:{required:true, number:true}, 
     editoptions:{maxlength:7, size:7}, 
     formoptions:{rowpos:6, elmprefix:' '} 
    }, 
    { 
     name:'rangeto', 
     index:'rangeto', 
     width:7, 
     editable:true, 
     edittype:'text', 
     editrules:{required:true, number:true, custom:true, custom_func:frtid}, 
     editoptions:{maxlength:7, size:7}, 
     formoptions:{rowpos:7,elmprefix:' '} 
    } 
] 
  1. ,你可以在“rangeto”我有一个自定义的验证看到一部分。这个验证实际上很简单。它只需要检查我们输入的'rangeto'的值是否大于'rangefrom'的值。现在我怎么能从'rangefrom'得到值,所以我可以将它与自定义验证函数中'rangeto'的值进行比较?

  2. 我的第二个问题是关于index'id'。它用作表的主键。所以在编辑模式下不应该改变。我在添加模式时说,用户可以随意输入它。但一旦提交,价值就不能改变。在编辑模式下,用户仍然可以看到'id'值,但是由于它是可以使用的,他不能改变它。如何才能做到这一点?

编辑

好了,现在我有另一个问题。但这是一个简单的问题。

  1. 如何在添加模式下调用自定义验证函数?导致我的功能会给出错误信息,当编辑模式时,它不应该被称为

可以任何人请帮助我这3个问题,我有吗?

编辑

解决了一些更多的解释从here

+0

stackoverflow的目标是不提供帮助论坛有人解决你所有的问题。目标是*分享常见问题和答案(解决常见问题)*。因为交换性问题是邪恶的。这些问题可能是不好的索引,所以其他人将无法找到解决方案。你应该在不同的问题中区分不同的问题。 – Oleg 2013-05-08 12:12:53

+0

我建议你使用'beforeCheckValues'回调,设置'id'字段只读或隐藏'beforeShowForm'内(参见[答案](http://stackoverflow.com/a/3405961/315935)和[答案](http://stackoverflow.com/a/3952654/315935))。 – Oleg 2013-05-08 12:32:42

+0

对此感到抱歉。我只是想让它更简单,所以我不必创建新的问题,因此并不真正浪费服务器中的一些空间。在我提出问题之前,我还在文档中进行了一些研究,并且已经搜索了一些类似的问题,但是无法得到正确的问题(正如您所说的错误索引),无法得到答案,或者我找到的问题是相似的但不是真的一样,在这种情况下,我已经找到关于内场编辑的答案,但它不能真正解决我的问题。无论如何感谢您的答复和答案,我会检查出来 – 2013-05-10 03:24:56

回答

0

我想,你现在主要的问题在编辑后的网格只改变id

首先,写出所有问题非常重要:使用哪种编辑模式,以及如果从服务器加载数据(datatype: "json"),是否使用loadonce: true

只能间接地假设您使用表单编辑模式,因为您在colModel中使用formoptions选项。表单编辑有reloadAfterSubmit选项(请参见the documentation),其默认值为true。这意味着jqGrid在成功提交一行编辑后重新加载网格的全部内容。该设置简化了与服务器的接口。如果您使用默认选项,那么您将不会遇到编辑id的问题,并且在编辑后正确排序数据也没有问题。

如果你决定使用reloadAfterSubmit选项,那么你必须做额外的工作。服务器应回应新值id。在数据库中保存数据的情况下,id通常将由数据库生成生成。您必须执行afterSubmit回调,该回调应从服务器响应中解码新的id并将其返回。

如果您使用内嵌编辑并需要更改id那么我会转发给您the answer。从示例中回调aftersavefunc包含修改id的代码。

已更新:我看过here,您在三位论坛中提出了同样的问题。我想很快从托尼的回答中评论一点。

每个添加或编辑表单都包含带有数据的表格(另一个表格包含可在表单底部看到的按钮)。前两个表的最后一排大多是隐藏的,并包含(或可以包含)的有用信息:

enter image description here

例如最后一行包含id="id_g"输入字段。该行存在事件,您没有列id(如在您的网格中)。因此$("#id_g").val()包含编辑行的rowid。添加对话框包含字符串"_empty"的地方。

更新2:如果你需要添加和编辑的形式显示id场,但使其只读你只需要使用readonly: 'readonly'属性id列(见here)。接下来的问题:你应该使用recreateForm: true属性添加和编辑表单。

我不建议你使用reloadAfterSubmit: true,但如果你确实需要使用,则应该从服务器(从savewmodule.php)新增加的行的id回报,你必须使用afterSubmit回调选项从服务器响应中获取新的ID并以文档方式返回(return [true, "", new_id];)。另外你必须在保存行之后设置网格的“id”列的内容。你应该修改id属性postdata参数afterSubmit回调。