(十一)可編輯表格EditorGridPanel
(2) 可編輯表格EditorGridPanel
可編輯表格是指可以直接在表格的單元格對錶格的資料進行編輯,ExtJS 中的可編輯表格由類Ext.grid.EditorGridPanel 表示,xtype 為editorgrid。使用EditorGridPanel 與使用普通的GridPanel 方式一樣,區別只是在定義列資訊的時候,可以指定某一列使用的編輯即可,下面來看一個簡單的示例。
Ext.onReady(function(){
var data=[
{id:1,name:'小王',email:'xiaowang@yahoo.com',sex:'男',bornDate:'1991-4-4'},
{id:1,name:'小李',email:'xiaoli@yahoo.com',sex:'男',bornDate:'1992-5-6'},
{id:1,name:'小蘭',email:'xiaoxiao@yahoo.com',sex:'女',bornDate:'1993-3-7'}
];
var store=new Ext.data.JsonStore({
data:data,
fields:["id","name","sex","email",{name:"bornDate",type:"date",dateFormat:"Y-n-j"}]
});
var colM=new Ext.grid.ColumnModel([
{header:"姓名",dataIndex:"name",sortable:true,
editor:new Ext.form.TextField()},
{header:"性別",dataIndex:"sex"},
{header:"出生日期",dataIndex:"bornDate",width:120,
renderer:Ext.util.Format.dateRenderer('Y年m月d日')},
{header:"電子郵件",dataIndex:"email",sortable:true,
editor:new Ext.form.TextField()}
]);
var grid = new Ext.grid.EditorGridPanel({
renderTo:"mydiv",
title:"學生基本資訊管理",
height:200,
width:600,
cm:colM,
store:store,
autoExpandColumn:3
});
});
上面的程式首先定義了一個包含學生資訊的物件陣列,然後建立了一個JsonStore,在建立這個store 的時候,指定bornDate 列的型別為日期date 型別,並使用dateFormat 來指定日期資訊的格式為"Y-n-j",Y 代表年,n 代表月,j 代表日期。定義表格列模型的時候,對於“姓名”及“電子郵件”列我們使用editor來定義該列使用的編輯器,這裡是使用Ext.form.TextField,最後使用new Ext.grid.EditorGridPanel(…)來建立一個可編輯的表格。執行上面的程式可以生成一個表格,雙擊表格中的“姓名”、或“電子郵件”單元格中的資訊可以觸發單元格的編輯,可以在單元格的文字框中直接編輯表格中的內容,修改過的單元格會有特殊的標記。
Ext的日期格式說明:
格式 說明 例子
d 月裡面的日期,2位,不足前面補0 01-31
D 星期裡面的每天的縮寫 Mon - Sun
j 月裡面的日期,前面不補0 1-31
l 星期的完整寫法 Sunday to Saturday
N ISO-8601的星期表示法 1=星期一,7是星期日
S 英語習慣的月內每天的2位的字首 st, nd, rd or th.
w 星期的數字表示 0=星期日,6等星期六
Z 在年內的第幾天,從0開始 0-364,閏年是365
W ISO-8601格式的,年內的星期數,從星期一開始 01-53
F 月份的完整文字表示 January to December
m 月份的2位數字表示,不足前面補零 01-12
M 月份的縮寫文字表示 Jan to Dec
n 月份的數字表示,不補零 1-12
t 月份的最大天數 28-31
L 是否為閏年 1是閏年,0則不是
o ISO-8601的年份表示,和Y相同,但是如果星期(W)輸入前一年或者後一年,則替換為那個年 1998,2004
Y 4位的年份表示 2008
y 2位的年份表示 98,08
a 小寫的上下午表示 am pm
A 大寫的上下午 AM PM
g 12小時制,不補零 1-12
G 24小時制,不補零 0-23
h 12小時制,2位,不足補零 01-12
H 24小時制,2位,不足補零 00-23
i 分鐘,2位,不足補零 00-59
s 秒,2位,不足補零 00-59
u 毫秒,前面補零 001 999
為了能編輯“性別”及“出生日期”列,同樣只需要在定義該列的時候指定editor 即可。由於出生日期是日期型別,因此我們可以使用日期編輯器來編輯,“性別”一列的資料不應該讓使用者直接輸入,而應該是通過下拉框進行選擇。日期編輯器可以直接使用Ext.form.DateField元件,下拉選擇框編輯器可以使用Ext.form.ComboBox 元件,下面是實現對性別及出生日期等列資訊編輯的程式碼:
Ext.onReady(function(){
var data=[
{id:1,name:'小王',email:'xiaowang@yahoo.com',sex:'男',bornDate:'1991-4-4'},
{id:1,name:'小李',email:'xiaoli@yahoo.com',sex:'男',bornDate:'1992-5-6'},
{id:1,name:'小蘭',email:'xiaoxiao@yahoo.com',sex:'女',bornDate:'1993-3-7'}
];
var store=new Ext.data.JsonStore({
data:data,
fields:["id","name","sex","email",{name:"bornDate",type:"date",dateFormat:"Y-n-j"}]
});
var colM=new Ext.grid.ColumnModel([
{header:"姓名",dataIndex:"name",sortable:true,
editor:new Ext.form.TextField()},
{header:"性別",dataIndex:"sex",
editor:new Ext.form.ComboBox({transform:"sexList",
triggerAction: 'all',
lazyRender:true})},
{header:"出生日期",dataIndex:"bornDate",width:120,
renderer:Ext.util.Format.dateRenderer('Y年m月d日'),
editor:new Ext.form.DateField({format:'Y年m月d日'})},
{header:"電子郵件",dataIndex:"email",sortable:true,
editor:new Ext.form.TextField()}
]);
var grid = new Ext.grid.EditorGridPanel({
renderTo:"mydiv",
title:"學生基本資訊管理",
height:200,
width:600,
cm:colM,
store:store,
autoExpandColumn:3,
clicksToEdit:1
});
});
<div id="mydiv"></div>
<select id="sexList">
<option>男</option>
<option>女</option>
</select>
注意在定義EditorGridPanel 的時候,我們增加了一個屬性“clicksToEdit:1”,表示點選一次單元格即觸發編輯,因為預設情況下該值為2,需要雙擊單元格才能編輯。為了給ComboBox 中填充資料,我們使用設定了該元件的transform 配置屬性值為sexList,sexList是一個傳統的<select>框。
執行上面的程式,我們可以得到一個能對錶格中所有資料進行編輯的表格了。點選上面的“性別”一列的單元格時,會出現一個下拉選擇框,點選“出生日期”一列的單元格時,會出現一個日期資料選擇框。
那麼如何儲存編輯後的資料呢?答案是直接使用afteredit 事件。當對一個單元格進行編輯完之後,就會觸發afteredit 事件,可以通過該事件處理函式來處理單元格的資訊編輯。比如在blog 示例中,當我們編輯一個日誌目錄的時候,需要把編輯後的資料儲存到伺服器。
Ext.onReady(function(){
var data=[
{id:1,name:'小王',email:'xiaowang@yahoo.com',sex:'男',bornDate:'1991-4-4'},
{id:1,name:'小李',email:'xiaoli@yahoo.com',sex:'男',bornDate:'1992-5-6'},
{id:1,name:'小蘭',email:'xiaoxiao@yahoo.com',sex:'女',bornDate:'1993-3-7'}
];
var store=new Ext.data.JsonStore({
data:data,
fields:["id","name","sex","email",{name:"bornDate",type:"date",dateFormat:"Y-n-j"}]
});
var colM=new Ext.grid.ColumnModel([
{header:"姓名",dataIndex:"name",sortable:true,
editor:new Ext.form.TextField()},
{header:"性別",dataIndex:"sex",
editor:new Ext.form.ComboBox({transform:"sexList",
triggerAction: 'all',
lazyRender:true})},
{header:"出生日期",dataIndex:"bornDate",width:120,
renderer:Ext.util.Format.dateRenderer('Y年m月d日'),
editor:new Ext.form.DateField({format:'Y年m月d日'})},
{header:"電子郵件",dataIndex:"email",sortable:true,
editor:new Ext.form.TextField()}
]);
var grid = new Ext.grid.EditorGridPanel({
renderTo:"mydiv",
title:"學生基本資訊管理",
height:200,
width:600,
cm:colM,
store:store,
autoExpandColumn:3,
clicksToEdit:1
});
//給可編輯的表格(grid為已定義的表格)新增afteredit事件
grid.on("afteredit",function(e){
//當前修改的記錄
var rec = e.record;
var name = rec.get("name");
var sex = rec.get("sex");
var bornDate = rec.get("bornDate");
var email = rec.get("email");
//簡寫方式:Ext.Msg.alert(....);
Ext.MessageBox.alert(
"修改",name + " " + sex + " "
+ Ext.util.Format.date(bornDate,"Y-n-j") + " " + email);
})
});
<div id="mydiv"></div>
<select id="sexList">
<option>男</option>
<option>女</option>
</select>
相關文章
- element封裝可編輯表格元件封裝元件
- vue+iview 實現可編輯表格VueView
- 截圖表格轉可編輯Word文字教程
- 封裝Vue Element的可編輯table表格元件封裝Vue元件
- 使用jQuery和Pure.CSS建立一個可編輯的表格jQueryCSS
- ListView 可編輯View
- 開發動態編輯的表格
- AngularJS教程十一—— 文字編輯器kindeditorAngularJS
- Excel表格新增編輯或刪除批註Excel
- FineUI v3.2.6釋出了!(表格內編輯)UI
- ElementUI表格行編輯單元格編輯支援(輸入框,選擇框)DemoUI
- (精華)2020年7月18日 vue element-ui實現表格可編輯VueUI
- vue中elementUI的表格實現自定義編輯VueUI
- 如何實現div可編輯效果
- Dynamics 365 可編輯子網格的欄位禁用不可編輯
- vue-split-table【表格合併和編輯外掛】Vue
- 金山文件怎麼設定編輯許可權 金山文件線上編輯許可權設定
- SAP CRM WebClient UI表格編輯模式的除錯明細WebclientUI模式除錯
- Markdown編輯表格時如何輸入豎線('|', pipe,vertical bar)
- 在VB中編輯資料庫和電子表格 (轉)資料庫
- jQuery一步一步實現跨瀏覽器的可編輯表格,支援IE、Firefox、SafarijQuery瀏覽器Firefox
- SAP CRM WebClient UI Text 可編輯與否的控制邏輯WebclientUI
- js input 不可編輯可傳值設定JS
- 可編輯選擇、刪除條目的ListViewView
- 動態控制SAP CRM附件的可編輯性
- 第十一課 Solidity語言編輯器REMIX指導大全SolidREM
- 【記錄】python3 使用tkinter製作tkinterUI編輯器 《十一》PythonUI
- VUE+Element UI實現簡單的表格行內編輯效果VueUI
- 用 RxJS 實現一個協同編輯的表格應用JS
- js實現的指定區域可編輯高亮效果JS
- 【留言板】可編輯輸入框操作總結
- 怎樣使網頁中的元素可編輯?? (轉)網頁
- CRM和C4C product category hierarchy的可編輯性控制邏輯Go
- 雲脈文件識別:輕輕一掃,可識別可編輯可分享
- vue-orgchart: 可編輯,可匯出JSON的樹形組織圖VueGCJSON
- 編輯
- 電子表格控制元件SpreadJS開發案例:一鍵實現多人協同線上表格編輯控制元件JS
- 基於Ant Design的可編輯Tree的實現