jqGrid自定义编辑对话框

我正在使用一个使用jqGrid的应用程序。 问题是应该出现在行编辑的编辑对话框必须具有特定的布局。 所以我更喜欢通过ajax加载它,然后手动将数据发送回jqGrid。 我在论坛上搜索了很多,但我找不到如何做的例子。

所以,我只需要jqGrid用PHP脚本中的自定义内容填充编辑对话框弹出窗口。

更新:我的想法是我有一个表单生成器,用户可以在其中设置编辑字段的位置/宽度/高度/可见性……这必须在编辑对话框中使用。

您可以使用editfuncaddfunc选项。 如果例如定义了editfunc,那么将使用所选行的id作为参数来调用editfunc而不是editGridRow jqGrid。

另外,您可以使用自定义按钮 (请参阅此答案作为示例)。

要在自定义编辑对话框后修改表格中的数据,您可以使用setRowData函数。

更新 :如果您只需要对编辑对话框的布局进行一些修改,您可以使用beforeShowForm进行修改。

你可以查看这个教程 ,这是jqGrid插件的官方演示网站。 我确信在该类别中有一些“行编辑”的例子。 您还可以在此演示网站中查看jqGrid的许多其他示例。
您也可以查看主页 。

如果您还有其他问题,可以在此处提出。 我确实在我的客户(机密)网站中使用了一些这样的例子,因此很容易根据您的需要进行操作。

希望能帮助到你。

我的编辑对话框有太多字段,因此变得太高 ,所以我不得不将字段并排放在2列中 。 我做了如下:

我尝试了各种方法,使用wrap()等,但发现如果修改原始表结构,则不会将值发布到服务器。 所以我只是克隆了tr元素,将它们放在新表中,并隐藏了旧元素。 我没有隐藏整个表格,因此validation仍然可见。 我在克隆元素上添加了一个onchange以更新旧元素。 这很好用。 参数tableName是您的jqgrid元素id。

 var splitFormatted = false; function SplitFormatForm(tableName, add) { if (!splitFormatted) { splitFormatted = true; $("#FrmGrid_" + tableName).append('
'); var cc = $("#TblGrid_" + tableName + "> tbody").children("tr").length; var s = (cc / 2) - 1; var x = $("#TblGrid_" + tableName + "> tbody").children("tr"); var i = 0; x.each(function (index) { var e = $(this).clone(); var oldID = e.attr("id") + ""; var newID = oldID; if (oldID.substring(0, 3) === "tr_") { newID = "clone_" + oldID; $(this).css("display", "none"); e.change(function () { $("#" + oldID + " > .DataTD > .FormElement").val($("#" + newID + " > .DataTD > .FormElement").val()); }); e.attr("id", newID); if (i++ < s) { $("#TblGrid_" + tableName + "_A").append(e); } else { $("#TblGrid_" + tableName + "_B").append(e); } } }); //This hack makes the popup work the first time too $(".ui-icon-closethick").trigger('click'); var sel_id = "'new'"; if (!add) { sel_id = jQuery('#'+tableName).jqGrid('getGridParam', 'selrow'); } jQuery('#'+tableName).jqGrid('editGridRow', sel_id, { closeAfterAdd: true, width: 800, afterSubmit: function (response, postdata) { return [response.responseText == 'OK', response.responseText]; } }); }}

在editOptions中调用此代码,如下所示:

 afterShowForm: function () { SplitFormatForm("SiteAccountsGrid", false); }