jqGrid,如何通过模态形式在网格内的任何位置添加一行?

时间:2011-12-08 15:37:52

标签: javascript jquery jqgrid

有没有办法做到这一点? 我使用jqGrid form editing feature填充我的网格。但是jqGrid只允许在网格内的顶部或底部位置添加一行。我想要做的是能够先前在网格上选择所需的位置(通过点击任何现有的行),然后在所选行的上方或下方添加一行。

抱歉我的英语不好。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要的是可能的,而不是那么复杂。从old demothe 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}}显示该建议有效。你不应该看看演示的许多其他代码。表单编辑的当前实现不支持本地编辑,但是我在演示中使用的只是执行此操作的旧代码。因此,演示的总代码相对较长,但我想要演示的部分可以在内部轻松找到。