2012-07-19 105 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