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