The struts2-jQuery grid offers a wide variety of edit features. But for one of our requirements, the Out-of-the-Box 'Edit' feature in this grid is not suitable. we want to customize it as follows..
我们的要求是:编辑多行
- 用户应该能够在一个时间内编辑超过1行 - 根据默认的失扩展实现,每一行的编辑之后,用户必须执行保存操作(通过按下回车键或点击保存按钮)继续编辑下一行
- 使用TAB行之间移动编辑
A“大前/ B ATCH保存“操作可能所有编辑的行数据发送到我的行动,并从那里我们可以做批量保存数据库操作
我们的做法:
定制1:把”编辑/取消“按钮在所有行的第一列上(每行上没有保存按钮)。在编辑的点击,在特定的行变为可编辑
定制4:把在网格工具栏中新的“批量保存”图像按钮
定制5:在点击“批量保存”,收集所有的编辑(连同ID)行数据,并在行动中接受它作为数组进行“批量更新”数据库操作
We got our inspiration from the 'Custom Edit' posted @ www.trirand.com/blog/jqgrid/jqgrid.html
**有没有人遇到过类似的要求,或者已经做过类似的自定义Struts2的,jQuery的电网? **
I am surprised that the grid does not offer this 'Multi Row Edit' by default.
**
更新1:
**
在实现自定义的 '散装/批次保存' 的网格功能的过程中,我们得到了几个问题..想与大家分享他们..而我们正在努力让他们固定..欣赏是否有人可以投掷他们的指针..
我们希望在通过我们自定义的“全部保存”网格工具栏按钮保存数据后刷新网格。点击这个按钮,我们正在向执行保存所有修改数据的操作发出Ajax请求。
当编辑后导航离开(不保存),显示警报,保存修改后的数据
防止页面发布到Action类,当用户点击“确认”,同时编辑列
添加自定义复选框,并将这些值用于自定义删除操作(因为通过Multiselect选项生成的复选框会导致多编辑中的问题)
编辑S2J网格中的规则功能以调用自定义JavaScript验证
**
更新2:
**
如下面的答案之一提到我们无法确定的bindKeys,同时这里是我们的做法。这个实现还有很多开放的目的,我们仍然在努力。
第1步:使用以下网格创建我们自定义的“编辑” &“取消”按钮数据onGridCompleteTopics="createbuttons"
的每一行,这里是createbuttons我们的定制编写的JScript函数。
$.subscribe('createbuttons',function(event,data)
{
var ids = jQuery("#gridtable").jqGrid('getDataIDs');
for(var i=0;i < ids.length;i++)
{
var cc = ids[i];
var rowData = jQuery('#gridtable').jqGrid('getCell',cc,'name');
edit = "<input type='image' class='ui-icon ui-icon-pencil' onblur='check()' style='display:inline;' onclick=\"javascript:editCurrentRow('"+cc +"');\" />";
cncl = "<input type='image' class='ui-icon ui-icon-cancel' style='display:inline;' onclick=\"javascript:removeCurrentRow('"+ cc +"');\" />";
jQuery("#gridtable").jqGrid('setRowData',ids[i],{Buttons:edit+cncl});
}
});
第2步:添加自定义按钮到电网,这将是书面的JavaScript功能,将收集所有editted行的数据,使一个Ajax后我们的Struts2的Action类的自定义。从那里,我们创建此输入的阵列,以将其传递到Oracle过程和在过程中执行DB操作(插入/更新)(使用FORALL INSERT/UPDATE)
navigatorExtraButtons="{
saveall:{
title:'Save Alls',
onclick:function(){call_function_save()}
}
}"
步骤3:添加了下面的代码的所有文本框的细胞,防止页面张贴在敲回车
<sjg:gridColumn name="name" index="name"
title="Name" formatter="String" editable="true" editoptions="{ dataEvents: [
{
type: 'keydown',
fn: function(e) {
var key = e.charCode || e.keyCode;
if (key == 13)//enter
{
return false;
}
}
}
]}"
edittype="text" />
我将让每个人都张贴了关于我们的进展的时候,但我们现在所面临的,我已经发布了另一个问题here和新的挑战, here
感谢@Uchenna的回应..我们无法弄清楚在哪里实施和放置的bindkeys,而是我们目前采取了不同的方法..请澄清,如果有甚至比我们所做的更好的方式.. – yathirigan 2012-07-25 04:11:42
我们将以下代码添加到所有文本框单元格,以防止在Enter上按下时发布页面。 '' –
yathirigan
2012-07-25 04:32:49
我们在我的网格列中添加了editrules,当我点击网格附带的'Save'按钮时,它们会被调用。但是,我们在网格的NavBar/ToolBar中为“保存操作”定义了一个自定义按钮。
**当用户点击我们的自定义按钮时,如何调用为网格列定义的规则(通过EditRules)?** – yathirigan 2012-07-31 15:21:15