我正在开发一个使用jqGrid的应用程序。问题是在行编辑时,应该出现特定布局的编辑对话框。因此,我希望通过ajax加载它,然后手动将数据发送回jqGrid。我在论坛上搜索了很多,但找不到如何实现的示例。
所以,我只需要jqGrid从PHP脚本中自定义内容填充编辑对话框弹出窗口。
更新:我的想法是,我有一个表单生成器,用户可以设置编辑字段的位置/宽度/高度/可见性...这必须在编辑对话框中使用。
editfunc
或addfunc
选项。例如,如果定义了editfunc
,那么在选择行的ID作为参数时,将调用editfunc
代替editGridRow jqGrid。
要在自定义编辑对话框之后修改表中的数据,您可以使用setRowData函数。
更新:如果您仅需修改编辑对话框的布局,则可以使用beforeShowForm来进行修改。
我的编辑对话框有太多的字段,因此变得太高,所以我不得不将这些字段分成两列并排放置。我是这样做的:
我尝试了各种方法,使用wrap()等,但发现如果修改原始表结构,则值不会被提交到服务器。因此,我只是克隆了tr元素,将它们放在新表中,并隐藏了旧表。我没有隐藏整个表格,以便验证仍然可见。我在克隆元素上放置了一个onchange事件来更新旧元素。这很有效。参数tableName是您的jqgrid元素ID。
var splitFormatted = false;
function SplitFormatForm(tableName, add) {
if (!splitFormatted) {
splitFormatted = true;
$("#FrmGrid_" + tableName).append('<table><tr><td><table id="TblGrid_' + tableName + '_A" class="EditTable" border="0" cellSpacing="0" cellPadding="0" /></td><td><table id="TblGrid_' + tableName + '_B" class="EditTable" border="0" cellSpacing="0" cellPadding="0" /></td></tr></table>');
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]; } });
}}
afterShowForm: function () { SplitFormatForm("SiteAccountsGrid", false); }
editfunc
或addfunc
是navGrid
的选项,而不是prmEdit
参数的一部分。因此,您应该尝试使用...).navGrid('#navId', {edit:true, editfunc: function(id){ alert(id); }});
。 - Oleg