Jqgrid入門-使用模態對話框編輯表格數據(三)


        Jqgrid是一個強大的表格插件,它提供了多種方式來編輯數據。這三種方式分別是:
  • Cell Editing——只允許修改某一個單元格內容
  • Inline Editing——允許在jqGrid中直接修改某一行的數據
  • Form Editing——彈出一個新的編輯窗口進行編輯和新增
       在我做的DEMO中,主要運用的是第三種, 彈出一個新窗口來編輯數據。如果想用其它兩種方式可以參考官網。
 
        相比較之前的例子,這個例子最重要的變化是添加了一個id為consoleDlg的<div>塊。在jquery的ready方法里面我將初始化div生成為一個模態對話框,用作編輯數據的界面。這個用到了jquery ui的dialog。關於如何使用dialog,參考這篇文章就ok了。這是主要的js代碼。
1
2
3
4
5
6
7
8
9
// 配置模態對話框
$( "#consoleDlg" ).dialog({
autoOpen : false , // 是否自動彈出窗口
modal : true , // 設置為模態對話框
resizable : true ,
width : 500,
height : 300,
position : "center" // 窗口顯示的位置
});
       那么我們通過什么方式來打開這個窗口呢? 細心的朋友們可以發現我在前面的文章一的截圖中,表格的最前面新增了一列操作欄。這個操作欄主要是通過Jqgrid的gridComplete方法來實現的。當表格所有數據都加載完成而且其他的處理也都完成時觸發此事件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
gridComplete : function () {
var ids = jQuery( "#gridTable" ).jqGrid( 'getDataIDs' );
for ( var i = 0; i < ids.length; i++) {
var cl = ids[i];
update = "<input type='button' value='修改' onclick='updateStu("
+ cl + ")'/>&nbsp;" ;
del = "<input type='button' value='刪除' onclick='deleteStu("
+ cl + ")'/>&nbsp;" ;
view = "<input type='button' value='查看' onclick='viewStu("
+ cl + ")'/>" ;
jQuery( "#gridTable" ).jqGrid( 'setRowData' ,
ids[i], {
process : update + del + view
});
}
},
        從這段代碼我們可以看出,我們使用這個方法先獲得表格所有列的id,然后在每一列中追加了三個按鈕。這三個按鈕點擊時就會觸發各自的方法。注意:代碼中的process對應colModel中的列。
        按鈕已經設置完成了,下面就該操作表格的數據了。
  •         添加數據
        點擊頁面上的新增按鈕,就會彈出剛才初始化的模態對話框。如圖:
         1
        這是一個form表單,里面包含學生的基本信息,還有兩個按鈕。有的朋友可能會問這個對話框是在彈出來的呢?別急,看這里。
1
2
3
4
5
6
7
8
9
10
/**
* 彈出新增學生對話框
*/
function addStu() {
var consoleDlg = $( "#consoleDlg" );
consoleDlg.html( "" );
var a1 = " <iframe src='studentProcess.jsp?op=add'" + "style='width: 100%;height: 100%' scrolling='auto' frameborder='0'></iframe>" ;
consoleDlg.append(a1);
consoleDlg.dialog( "option" , "title" , "新增學生信息" ).dialog( "open" );
};
        原來點擊按鈕調用的是這個方法呀。解釋一下,先獲得這個對象,然后清空對話框里面的元素。然后追加一個iframe。再調用dialog的open方法。
        填寫好表單,點擊新增按鈕。提示新增成功后,就可以在表格中看到剛才新增的同學了。不用刷新頁面,Jqgrid有現成的方法。
        這是新增學生的具體方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function addStu() {   // 序列化表單
var obj2 = $( "#myform" ).serializeArray();
$.ajax({   url : "QueryActionUrl_addStu.action" ,
data : obj2,
dataType : "json" ,
cache : false ,
type : "post" ,
error : function (textStatus, errorThrown) {
window.parent.hiAlert( "系統ajax交互錯誤" );   },
success : function (data, textStatus) {
if (data.messageBean.code == "200" ) {
hiAlert(data.messageBean.msg, "提示" , function () {
window.parent.$( "#consoleDlg" ).dialog( "close" );       // 刷新表格
window.parent.$( "#gridTable" ).jqGrid( "setGridParam" , {
search : true ,       mtype : "post"       }).trigger( "reloadGrid" , [ {
page : 1      }
]);
});
} else {
hiAlert(data.messageBean.msg, "提示" , function () {
window.parent.$( "#consoleDlg" ).dialog( "close" );     });
}
}
}); }
  • 修改數據
       修改數據的時候,和剛才新增方法就有點區別了。因為修改的時候要先把數據加載到對話框的表單中。如圖:
2
      比如,我要修改李麗麗的信息。我們需要把原來的信息加載出來。所以在彈出對話框之前我們需要把這個學生的id也傳遞過來。如圖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 彈出修改學生的對話框
*/
function updateStu(selectedRowId) {
var consoleDlg = $( "#consoleDlg" );
consoleDlg.html( "" );
var str = $( "#gridTable" ).jqGrid( "getRowData" , selectedRowId); // 根據行ID,獲取選中行的數據
id = {
id : str.id
};
var a1 = " <iframe src='studentProcess.jsp?op=update&id="
+ JSON.stringify(id)
+ "' style='width: 100%;height: 100%' scrolling='auto' frameborder='0'></iframe>" ;
consoleDlg.append(a1);
consoleDlg.dialog( "option" , "title" , "修改學生信息" ).dialog( "open" );
};
通過和上面新增方法對比,可以發現修改方法是先得到選中行的id,然后得到學生的id,最后通過json傳遞過去。
點擊修改按鈕,提示修改成功后,就可以在表格中看到修改后的學生數據了。
 這是修改學生的方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function updateStu() {
var obj2 = $( "#myform" ).serializeArray();
$.ajax({
url : "QueryActionUrl_updateStu.action" ,
data : obj2,
dataType : "json" ,
cache : false ,
type : "post" ,
error : function (textStatus, errorThrown) {
window.parent.hiAlert( "系統ajax交互錯誤" );
},
success : function (data, textStatus) {
if (data.messageBean.code == "200" ) {
hiAlert(data.messageBean.msg, "提示" , function () {
window.parent.$( "#consoleDlg" ).dialog( "close" );
// 刷新表格
window.parent.$( "#gridTable" ).jqGrid( "setGridParam" , {
search : true ,
mtype : "post"
}).trigger( "reloadGrid" , [ {
page : 1
} ]);
});
} else {
hiAlert(data.messageBean.msg, "提示" , function () {
window.parent.$( "#consoleDlg" ).dialog( "close" );
});
}
}
});
}
        刪除和查看數據就不做具體說明了,和修改差不多只是dao層中調用的方法不一樣。在這些代碼中只需關注op(操作標識)和傳遞的學生id。也可以這樣做,在修改、刪除和查看的時候,把學生的信息通過json全部傳遞過來,就不需要通過學生id去查詢數據庫了,減少與數據庫的交互。

原創文章,轉載請注明: 轉載自java開發者

本文鏈接地址: Jqgrid入門-使用模態對話框編輯表格數據(三)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM