有没有办法做到这一点? 我使用jqGrid form editing feature填充我的网格。但是jqGrid只允许在网格内的顶部或底部位置添加一行。我想要做的是能够先前在网格上选择所需的位置(通过点击任何现有的行),然后在所选行的上方或下方添加一行。
抱歉我的英语不好。提前谢谢。
答案 0 :(得分:1)
您需要的是可能的,而不是那么复杂。从old demo看the answer addedrow。如果您的列中包含name: 'myColName'
,并且您想要在编辑中添加任何信息,或者在之后添加表单有关该列的信息,则可以在其中插入数据行。表单包含<table>
。因此,您应该插入具有一个或两个子<tr>
元素的<td>
(标签的单元格和数据的单元格)。为了与表单中的其他数据保持一致,您应该class="FormData"
使用<tr>
元素。第一个<td>
元素(在标签的列中)应该具有class="CaptionTD ui-widget-content"
,第二个<td>
元素(在用于修改输入的数据的列中)应该具有{{1 }}:
class="DataTD ui-widget-content"
更新:好的,现在我明白了你想要的。问题是,{ // edit options
recreateForm: true,
beforeShowForm: function ($form) {
var $formRow = $form.find('#tr_Name'); // 'Name' in the column name
// after which you want insert the information
$('<tr class="FormData"><td class="CaptionTD ui-widget-content">' +
'<b>Label:</b>' + // in the line can be any custom HTML code
'</td><td class="DataTD ui-widget-content">' +
'<span></span>' + // in the line can be any custom HTML code
'</td></tr>').insertAfter($formRow);
}
}
将调用添加editGridRow The demo选项的新行。因此,如果您使用addRowData
选项,则可以在网格中将新行添加为reloadAfterSubmit: false
或'first'
。为了能够使用'last'
的{{1}}或'after'
参数,必须使用一个参数调用方法'before'
,该参数指定之前行(或之后)的行ID )将插入新行。
初看起来似乎只有修改了jqGrid的源代码才能实现你的要求。实际上,您可以使用非常小的代码和实现您的需求,而无需修改jqGrid 的源代码。我建议如下:
您可以将指针保存到变量中的addRowData
的原始实现中并覆盖它
与您的实施:
addRowData
上面的代码介绍了addRowData
的两个新选项:var oldAddRowData = $.fn.jqGrid.addRowData;
$.jgrid.extend({
addRowData: function (rowid, rdata, pos, src) {
if (pos === 'afterSelected' || pos === 'beforeSelected') {
if (typeof src === 'undefined' && this[0].p.selrow !== null) {
src = this[0].p.selrow;
pos = (pos === 'afterSelected') ? 'after' : 'before';
} else {
pos = (pos === 'afterSelected') ? 'last' : 'first';
}
}
return oldAddRowData.call(this, rowid, rdata, pos, src);
}
});
和addRowData
。如果您在创建jqGrid之前包含代码,则将使用您的自定义'afterSelected'
创建网格,因此您可以使用新的'beforeSelected'
或addRowData
作为添加表单的选项。
{{3}}显示该建议有效。你不应该看看演示的许多其他代码。表单编辑的当前实现不支持本地编辑,但是我在演示中使用的只是执行此操作的旧代码。因此,演示的总代码相对较长,但我想要演示的部分可以在内部轻松找到。