當切換datagrid視圖到"detailview"時,用戶能夠展開一行來顯示該行下面的任何詳細信息。此功能容許用戶爲放置在行詳細信息面板中的編輯表單提供恰當的佈局。在本教程中,咱們使用DataGrid組件來減小編輯表單所佔用的空間。php
查看演示html
<table id="dg" title="My Users" style="width:550px;height:250px"服務器
url="get_users.php"app
toolbar="#toolbar"函數
fitColumns="true" singleSelect="true">佈局
<thead>post
<tr>ui
<th field="firstname" width="50">First Name</th>this
<th field="lastname" width="50">Last Name</th>url
<th field="phone" width="50">Phone</th>
<th field="email" width="50">Email</th>
</tr>
</thead>
</table>
<div id="toolbar">
<a href="#" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newItem()">New</a>
<a href="#" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyItem()">Destroy</a>
</div>
$(
'#dg'
).datagrid({
view: detailview,
detailFormatter:
function
(index,row){
return
'<div class="ddv"></div>'
;
},
onExpandRow:
function
(index,row){
var
ddv = $(
this
).datagrid(
'getRowDetail'
,index).find(
'div.ddv'
);
ddv.panel({
border:
false
,
cache:
true
,
href:
'show_form.php?index='
+index,
onLoad:
function
(){
$(
'#dg'
).datagrid(
'fixDetailRowHeight'
,index);
$(
'#dg'
).datagrid(
'selectRow'
,index);
$(
'#dg'
).datagrid(
'getRowDetail'
,index).find(
'form'
).form(
'load'
,row);
}
});
$(
'#dg'
).datagrid(
'fixDetailRowHeight'
,index);
}
});
若要使用DataGrid的詳細視圖,那麼就在html 頁面頭部引入"datagrid-detailview.js"文件。
咱們使用"detailFormatter"函數來生成行詳細信息內容。在這種狀況下,咱們返回一個用於放置編輯表單的空的 。當用戶點擊該行展開按鈕("+")時,"onExpandRow"事件將被觸發,咱們能夠經過AJAX加載編輯表單。使用getRowDetail方法能夠得到該行的詳細信息容器,所以咱們可以查找到該行的詳細信息面板。在行詳細信息中建立面板,並從"show_form.php"中加載返回的編輯表單。
從服務器中加載編輯表單。
show_form.php
<form method=
"post"
>
<table
class
=
"dv-table"
style=
"width:100%;background:#fafafa;padding:5px;margin-top:5px;"
>
<tr>
<td>First Name</td>
<td><input name=
"firstname"
class
=
"easyui-validatebox"
required=
"true"
></input></td>
<td>Last Name</td>
<td><input name=
"lastname"
class
=
"easyui-validatebox"
required=
"true"
></input></td>
</tr>
<tr>
<td>Phone</td>
<td><input name=
"phone"
></input></td>
<td>Email</td>
<td><input name=
"email"
class
=
"easyui-validatebox"
validType=
"email"
></input></td>
</tr>
</table>
<div style=
"padding:5px 0;text-align:right;padding-right:30px"
>
<a href=
"#"
class
=
"easyui-linkbutton"
iconCls=
"icon-save"
plain=
"true"
onclick=
"saveItem(<?php echo $_REQUEST['index'];?>)"
>Save</a>
<a href=
"#"
class
=
"easyui-linkbutton"
iconCls=
"icon-cancel"
plain=
"true"
onclick=
"cancelItem(<?php echo $_REQUEST['index'];?>)"
>Cancel</a>
</div>
</form>
調用"saveItem"函數來保存用戶,或調用"cancelItem"函數來取消編輯。
function
saveItem(index){
var
row = $(
'#dg'
).datagrid(
'getRows'
)[index];
var
url = row.isNewRecord ?
'save_user.php'
:
'update_user.php?id='
+row.id;
$(
'#dg'
).datagrid(
'getRowDetail'
,index).find(
'form'
).form(
'submit'
,{
url: url,
onSubmit:
function
(){
return
$(
this
).form(
'validate'
);
},
success:
function
(data){
data = eval(
'('
+data+
')'
);
data.isNewRecord =
false
;
$(
'#dg'
).datagrid(
'collapseRow'
,index);
$(
'#dg'
).datagrid(
'updateRow'
,{
index: index,
row: data
});
}
});
}
肯定首先要發佈哪個URL,而後查找表單對象,並調用"submit"方法來提交表單數據。當數據保存成功後,收起並更新行數據。
function
cancelItem(index){
var
row = $(
'#dg'
).datagrid(
'getRows'
)[index];
if
(row.isNewRecord){
$(
'#dg'
).datagrid(
'deleteRow'
,index);
}
else
{
$(
'#dg'
).datagrid(
'collapseRow'
,index);
}
}
當取消編輯操做時,若是該行是新行並且尚未保存,那麼直接刪除該行,不然收起該行。
下載EasyUI示例:easyui-crud-demo.zip
有興趣的朋友能夠點擊查看更多有關jQuery EasyUI的教程!