2012-07-19 104 views
0
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. 用户应该能够在一个时间内编辑超过1行 - 根据默认的失扩展实现,每一行的编辑之后,用户必须执行保存操作(通过按下回车键或点击保存按钮)继续编辑下一行
  2. 使用TAB行之间移动编辑
  3. 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:

**

在实现自定义的 '散装/批次保存' 的网格功能的过程中,我们得到了几个问题..想与大家分享他们..而我们正在努力让他们固定..欣赏是否有人可以投掷他们的指针..

  1. 我们希望在通过我们自定义的“全部保存”网格工具栏按钮保存数据后刷新网格。点击这个按钮,我们正在向执行保存所有修改数据的操作发出Ajax请求。

  2. 当编辑后导航离开(不保存),显示警报,保存修改后的数据

  3. 防止页面发布到Action类,当用户点击“确认”,同时编辑列

  4. 添加自定义复选框,并将这些值用于自定义删除操作(因为通过Multiselect选项生成的复选框会导致多编辑中的问题)

  5. 编辑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

回答

0

我想你需要看inline编辑here并执行bindKeys,你可以找到here。让我知道如果你有问题实施它。

bindKeys 

Parameters: 

{ 
    onEnter: null, 
    onSpace: null, 
    onLeftKey: null, onRightKey: null, 
    scrollingRows : true 
} 
+0

感谢@Uchenna的回应..我们无法弄清楚在哪里实施和放置的bindkeys,而是我们目前采取了不同的方法..请澄清,如果有甚至比我们所做的更好的方式.. – yathirigan 2012-07-25 04:11:42

+0

我们将以下代码添加到所有文本框单元格,以防止在Enter上按下时发布页面。 '' – yathirigan 2012-07-25 04:32:49

+0

我们在我的网格列中添加了editrules,当我点击网格附带的'Save'按钮时,它们会被调用。但是,我们在网格的NavBar/ToolBar中为“保存操作”定义了一个自定义按钮。
**当用户点击我们的自定义按钮时,如何调用为网格列定义的规则(通过EditRules)?** – yathirigan 2012-07-31 15:21:15

0

嗨,朋友我使用内联编辑得到了上述问题的解决方案。 批量保存:

使用java脚本可以批量保存。 我们读到的所有网格值使用Java脚本则是通过网络发送到我们的动作类

谢谢

如果编码,我将发送给您的任何帮助。

+1

您可以发布代码以便帮助其他用户。 – 2012-08-01 07:13:53

+0

@sagar我们在实现这个定制的'批量保存'时遇到了几个问题问题1)当用户双击一行时,它变得可编辑并且使其他行(打开以进行编辑)为只读状态。问题2)您在“批量保存”期间如何对数据执行验证?你是否可以使用editrules功能,或者你是否编写自定义的JavaScript表单验证代码?你能不能请你分享一下你的代码.. – yathirigan 2012-08-01 09:18:53

+0

@sagar如果你不介意,你能发布代码,以便它可以帮助别人吗? – yathirigan 2013-05-21 06:17:46