首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

extjs学习札记(六-3) grid中数据的保存,添加和删除

2012-11-22 
extjs学习笔记(六--3) grid中数据的保存,添加和删除?我们先通过grid的getSelectionModel方法获得当前的选

extjs学习笔记(六--3) grid中数据的保存,添加和删除

?我们先通过grid的getSelectionModel方法获得当前的选择模型,由于当前我们使用了行选择模型,所以返回的是RowSelectionModel的对象,然后通过该对象的hasSelection方法判断有没有行呗选中,没有的话就弹出一个对话框,如果有选中的行要被删除,弹出一个提示框让用户确定删除操作,如果确实要删除,使用RowSelectionModel对象的getSelections方法返回所有被选择行的集合,遍历此集合,从store中去掉集合中的行。看看效果图:

extjs学习札记(六-3) grid中数据的保存,添加和删除?

? ?? 点击“是”,所有选中的行被删除,通过firebug可以看到被删除的行在store的removed属性中保存。

??? 但是有些人可能不习惯这里所谓的行选择模型,他们可能喜欢看到在每一行的前边有一个checkbox,勾选了之后表示选择该行,extjs中的CheckboxSelectionModel类可以方便的让我们实现这一点,该类继承自RowSelectionModel,说明这只是一种特殊的行选择模型。我们具体来看看怎么进行操作。首先需要定义一个CheckboxSelectionModel的对象:var sm=new Ext.grid.CheckboxSelctionModle({checkOnly:true}),这里chckOnly:true表明只能通过checkbox来选择行,为false的话则还可以通过我们上边提到的方法来选择行。接下来需要把原来的行选择模型替换成我们新的sm,然后运行一下看看吧。我们没有看到预期中的效果,这是为什么呢?仔细想一想,确实应该是看不到什么效果,我们知道列都是在ColumnModel里边配置的,我们的CheckboxSelectionModel需要添加一列,自然也要在其中配置。那我们就加上去吧,完整的代码如下:

///<reference?path="vswd-ext_2.0.2.js"?/>
??2extjs学习札记(六-3) grid中数据的保存,添加和删除/*
??3extjs学习札记(六-3) grid中数据的保存,添加和删除*作者:大笨
??4extjs学习札记(六-3) grid中数据的保存,添加和删除*日期:2009-10-20
??5extjs学习札记(六-3) grid中数据的保存,添加和删除*版本:1.0
??6extjs学习札记(六-3) grid中数据的保存,添加和删除*博客地址:http://yage.cnblogs.com
??7extjs学习札记(六-3) grid中数据的保存,添加和删除*QQ:14202190
??8extjs学习札记(六-3) grid中数据的保存,添加和删除*/
??9extjs学习札记(六-3) grid中数据的保存,添加和删除Ext.BLANK_IMAGE_URL?=?'../extjs/resources/images/default/s.gif';
?10extjs学习札记(六-3) grid中数据的保存,添加和删除
?11extjs学习札记(六-3) grid中数据的保存,添加和删除Ext.onReady(function()?{
?12extjs学习札记(六-3) grid中数据的保存,添加和删除????Ext.QuickTips.init();
?13extjs学习札记(六-3) grid中数据的保存,添加和删除
?14extjs学习札记(六-3) grid中数据的保存,添加和删除????//格式化日期
?15extjs学习札记(六-3) grid中数据的保存,添加和删除????function?formatDate(value)?{
?16extjs学习札记(六-3) grid中数据的保存,添加和删除????????return?value???value.dateFormat('Y年m月d日')?:?'';
?17extjs学习札记(六-3) grid中数据的保存,添加和删除????}
?18extjs学习札记(六-3) grid中数据的保存,添加和删除
?19extjs学习札记(六-3) grid中数据的保存,添加和删除????//?别名
?20extjs学习札记(六-3) grid中数据的保存,添加和删除????var?fm?=?Ext.form;
?21extjs学习札记(六-3) grid中数据的保存,添加和删除
?22extjs学习札记(六-3) grid中数据的保存,添加和删除????//checkbox选择模型
?23extjs学习札记(六-3) grid中数据的保存,添加和删除????var?sm?=?new?Ext.grid.CheckboxSelectionModel({?checkOnly:?true?});
?24extjs学习札记(六-3) grid中数据的保存,添加和删除????
?25extjs学习札记(六-3) grid中数据的保存,添加和删除????//构造一个只能包含checkbox的列
?26extjs学习札记(六-3) grid中数据的保存,添加和删除????var?checkColumn?=?new?Ext.grid.CheckColumn({
?27extjs学习札记(六-3) grid中数据的保存,添加和删除????????header:?'Indoor?',
?28extjs学习札记(六-3) grid中数据的保存,添加和删除????????dataIndex:?'indoor',
?29extjs学习札记(六-3) grid中数据的保存,添加和删除????????width:?55
?30extjs学习札记(六-3) grid中数据的保存,添加和删除????});
?31extjs学习札记(六-3) grid中数据的保存,添加和删除
?32extjs学习札记(六-3) grid中数据的保存,添加和删除????//?构造ColumnModel
?33extjs学习札记(六-3) grid中数据的保存,添加和删除????var?cm?=?new?Ext.grid.ColumnModel({
?34extjs学习札记(六-3) grid中数据的保存,添加和删除????columns:?[
?35extjs学习札记(六-3) grid中数据的保存,添加和删除????????sm,
?36extjs学习札记(六-3) grid中数据的保存,添加和删除????????{
?37extjs学习札记(六-3) grid中数据的保存,添加和删除????????????id:?'common',
?38extjs学习札记(六-3) grid中数据的保存,添加和删除????????????header:?'Common?Name',
?39extjs学习札记(六-3) grid中数据的保存,添加和删除????????????dataIndex:?'common',
?40extjs学习札记(六-3) grid中数据的保存,添加和删除????????????width:?220,
?41extjs学习札记(六-3) grid中数据的保存,添加和删除????????????//?使用上边定义好的别名
?42extjs学习札记(六-3) grid中数据的保存,添加和删除????????????editor:?new?fm.TextField({
?43extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????allowBlank:?false
?44extjs学习札记(六-3) grid中数据的保存,添加和删除????????????})
?45extjs学习札记(六-3) grid中数据的保存,添加和删除????????},?{
?46extjs学习札记(六-3) grid中数据的保存,添加和删除????????????header:?'Light',
?47extjs学习札记(六-3) grid中数据的保存,添加和删除????????????dataIndex:?'light',
?48extjs学习札记(六-3) grid中数据的保存,添加和删除????????????width:?130,
?49extjs学习札记(六-3) grid中数据的保存,添加和删除????????????editor:?new?fm.ComboBox({
?50extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????typeAhead:?true,
?51extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????triggerAction:?'all',
?52extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????transform:?'light',
?53extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????lazyRender:?true,
?54extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????listClass:?'x-combo-list-small'
?55extjs学习札记(六-3) grid中数据的保存,添加和删除????????????})
?56extjs学习札记(六-3) grid中数据的保存,添加和删除????????},?{
?57extjs学习札记(六-3) grid中数据的保存,添加和删除????????????header:?'Price',
?58extjs学习札记(六-3) grid中数据的保存,添加和删除????????????dataIndex:?'price',
?59extjs学习札记(六-3) grid中数据的保存,添加和删除????????????width:?70,
?60extjs学习札记(六-3) grid中数据的保存,添加和删除????????????align:?'right',
?61extjs学习札记(六-3) grid中数据的保存,添加和删除????????????renderer:?'usMoney',
?62extjs学习札记(六-3) grid中数据的保存,添加和删除????????????editor:?new?fm.NumberField({
?63extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????allowBlank:?false,
?64extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????allowNegative:?false,
?65extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????maxValue:?100000
?66extjs学习札记(六-3) grid中数据的保存,添加和删除????????????})
?67extjs学习札记(六-3) grid中数据的保存,添加和删除????????},?{
?68extjs学习札记(六-3) grid中数据的保存,添加和删除????????????header:?'Available',
?69extjs学习札记(六-3) grid中数据的保存,添加和删除????????????dataIndex:?'availDate',
?70extjs学习札记(六-3) grid中数据的保存,添加和删除????????????width:?95,
?71extjs学习札记(六-3) grid中数据的保存,添加和删除????????????renderer:?formatDate,
?72extjs学习札记(六-3) grid中数据的保存,添加和删除????????????editor:?new?fm.DateField({
?73extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????format:?'Y年m月d日',
?74extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????minValue:?'01/01/06',
?75extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????disabledDays:?[0,?6],
?76extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????disabledDaysText:?'Plants?are?not?available?on?the?weekends'
?77extjs学习札记(六-3) grid中数据的保存,添加和删除????????????})
?78extjs学习札记(六-3) grid中数据的保存,添加和删除????????},
?79extjs学习札记(六-3) grid中数据的保存,添加和删除????????checkColumn,
?80extjs学习札记(六-3) grid中数据的保存,添加和删除????],
?81extjs学习札记(六-3) grid中数据的保存,添加和删除????????defaults:?{
?82extjs学习札记(六-3) grid中数据的保存,添加和删除????????????sortable:?true
?83extjs学习札记(六-3) grid中数据的保存,添加和删除????????}
?84extjs学习札记(六-3) grid中数据的保存,添加和删除????});
?85extjs学习札记(六-3) grid中数据的保存,添加和删除
?86extjs学习札记(六-3) grid中数据的保存,添加和删除
?87extjs学习札记(六-3) grid中数据的保存,添加和删除????//?构造一个Store对象
?88extjs学习札记(六-3) grid中数据的保存,添加和删除????var?store?=?new?Ext.data.Store({
?89extjs学习札记(六-3) grid中数据的保存,添加和删除
?90extjs学习札记(六-3) grid中数据的保存,添加和删除????????url:?'plants.xml',
?91extjs学习札记(六-3) grid中数据的保存,添加和删除
?92extjs学习札记(六-3) grid中数据的保存,添加和删除????????reader:?new?Ext.data.XmlReader(
?93extjs学习札记(六-3) grid中数据的保存,添加和删除????????????{
?94extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????record:?'plant'
?95extjs学习札记(六-3) grid中数据的保存,添加和删除????????????},
?96extjs学习札记(六-3) grid中数据的保存,添加和删除
?97extjs学习札记(六-3) grid中数据的保存,添加和删除????????????[
?98extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????{?name:?'common',?type:?'string'?},
?99extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????{?name:?'botanical',?type:?'string'?},
100extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????{?name:?'light'?},
101extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????{?name:?'price',?type:?'float'?},
102extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????{?name:?'availDate',?mapping:?'availability',?type:?'date',?dateFormat:?'m/d/Y'?},
103extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????{?name:?'indoor',?type:?'bool'?}
104extjs学习札记(六-3) grid中数据的保存,添加和删除????????????]
105extjs学习札记(六-3) grid中数据的保存,添加和删除????????),
106extjs学习札记(六-3) grid中数据的保存,添加和删除????????sortInfo:?{?field:?'common',?direction:?'ASC'?}
107extjs学习札记(六-3) grid中数据的保存,添加和删除????});
108extjs学习札记(六-3) grid中数据的保存,添加和删除
109extjs学习札记(六-3) grid中数据的保存,添加和删除????//?构造可编辑的grid
110extjs学习札记(六-3) grid中数据的保存,添加和删除????var?grid?=?new?Ext.grid.EditorGridPanel({
111extjs学习札记(六-3) grid中数据的保存,添加和删除????????//sm:?new?Ext.grid.RowSelectionModel({?singleSelect:?false?}),
112extjs学习札记(六-3) grid中数据的保存,添加和删除????????sm:?sm,
113extjs学习札记(六-3) grid中数据的保存,添加和删除????????store:?store,
114extjs学习札记(六-3) grid中数据的保存,添加和删除????????cm:?cm,
115extjs学习札记(六-3) grid中数据的保存,添加和删除????????renderTo:?'grid',
116extjs学习札记(六-3) grid中数据的保存,添加和删除????????width:?600,
117extjs学习札记(六-3) grid中数据的保存,添加和删除????????height:?300,
118extjs学习札记(六-3) grid中数据的保存,添加和删除????????autoExpandColumn:?'common',
119extjs学习札记(六-3) grid中数据的保存,添加和删除????????title:?'Edit?Plants?',
120extjs学习札记(六-3) grid中数据的保存,添加和删除????????frame:?true,
121extjs学习札记(六-3) grid中数据的保存,添加和删除????????plugins:?checkColumn,
122extjs学习札记(六-3) grid中数据的保存,添加和删除????????clicksToEdit:?2,
123extjs学习札记(六-3) grid中数据的保存,添加和删除????????listeners:?{
124extjs学习札记(六-3) grid中数据的保存,添加和删除????????????"afterEdit":?{
125extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????fn:?afterEdit,
126extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????scope:?this
127extjs学习札记(六-3) grid中数据的保存,添加和删除????????????}
128extjs学习札记(六-3) grid中数据的保存,添加和删除????????},
129extjs学习札记(六-3) grid中数据的保存,添加和删除????????tbar:?[{
130extjs学习札记(六-3) grid中数据的保存,添加和删除????????????text:?"保存",
131extjs学习札记(六-3) grid中数据的保存,添加和删除????????????handler:?function()?{
132extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????var?modified?=?store.modified;
133extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????updateData(modified);
134extjs学习札记(六-3) grid中数据的保存,添加和删除????????????}
135extjs学习札记(六-3) grid中数据的保存,添加和删除????????},
136extjs学习札记(六-3) grid中数据的保存,添加和删除????????????'-',
137extjs学习札记(六-3) grid中数据的保存,添加和删除????????????{
138extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????text:?"增加",
139extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????handler:?function()?{
140extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????var?Plant?=?store.recordType;
141extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????var?p?=?new?Plant({
142extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????common:?'New?Plant?1',
143extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????light:?'Mostly?Shade',
144extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????price:?0,
145extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????availDate:?(new?Date()).clearTime(),
146extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????indoor:?false
147extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????});
148extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????grid.stopEditing();
149extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????store.insert(0,?p);
150extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????grid.startEditing(0,?0);
151extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????}
152extjs学习札记(六-3) grid中数据的保存,添加和删除????????????},
153extjs学习札记(六-3) grid中数据的保存,添加和删除????????????"?",
154extjs学习札记(六-3) grid中数据的保存,添加和删除????????????{
155extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????text:?"删除",
156extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????handler:?function()?{
157extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????var?selModel?=?grid.getSelectionModel();
158extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????if?(selModel.hasSelection())?{
159extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????Ext.Msg.confirm("警告",?"确定要删除吗?",?function(button)?{
160extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????????if?(button?==?"yes")?{
161extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????????????var?selections?=?selModel.getSelections();
162extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????????????Ext.each(selections,?function(item)?{
163extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????????????????store.remove(item);
164extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????????????????store.removed.push(item);
165extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????????????});
166extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????????}
167
168extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????});
169extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????}
170extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????else?{
171extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????????Ext.Msg.alert("错误",?"没有任何行被选中,无法进行删除操作!");
172extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????}
173extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????}
174extjs学习札记(六-3) grid中数据的保存,添加和删除????????????}
175extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????]
176extjs学习札记(六-3) grid中数据的保存,添加和删除????});
177extjs学习札记(六-3) grid中数据的保存,添加和删除
178extjs学习札记(六-3) grid中数据的保存,添加和删除????//?触发数据的加载
179extjs学习札记(六-3) grid中数据的保存,添加和删除????store.load();
180extjs学习札记(六-3) grid中数据的保存,添加和删除
181extjs学习札记(六-3) grid中数据的保存,添加和删除????//发送数据到服务器端进行更新
182extjs学习札记(六-3) grid中数据的保存,添加和删除????function?updateData(modified)?{
183extjs学习札记(六-3) grid中数据的保存,添加和删除????????var?json?=?[];
184extjs学习札记(六-3) grid中数据的保存,添加和删除????????Ext.each(modified,?function(item)?{
185extjs学习札记(六-3) grid中数据的保存,添加和删除????????????json.push(item.data);
186extjs学习札记(六-3) grid中数据的保存,添加和删除????????});
187extjs学习札记(六-3) grid中数据的保存,添加和删除????????if?(json.length?>?0)?{
188extjs学习札记(六-3) grid中数据的保存,添加和删除????????????Ext.Ajax.request({
189extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????url:?"EditGrid.aspx",
190extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????params:?{?data:?Ext.util.JSON.encode(json)?},
191extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????method:?"POST",
192extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????success:?function(response)?{
193extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????Ext.Msg.alert("信息",?"数据更新成功!",?function()?{?store.reload();?});
194extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????},
195extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????failure:?function(response)?{
196extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????????Ext.Msg.alert("警告",?"数据更新失败,请稍后再试!");
197extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????}
198extjs学习札记(六-3) grid中数据的保存,添加和删除????????????});
199extjs学习札记(六-3) grid中数据的保存,添加和删除????????}
200extjs学习札记(六-3) grid中数据的保存,添加和删除????????else?{
201extjs学习札记(六-3) grid中数据的保存,添加和删除????????????Ext.Msg.alert("警告",?"没有任何需要更新的数据!");
202extjs学习札记(六-3) grid中数据的保存,添加和删除????????}
203extjs学习札记(六-3) grid中数据的保存,添加和删除????}
204extjs学习札记(六-3) grid中数据的保存,添加和删除
205extjs学习札记(六-3) grid中数据的保存,添加和删除????//编辑后触发的事件,可在此进行数据有效性的验证
206extjs学习札记(六-3) grid中数据的保存,添加和删除????function?afterEdit(e)?{
207extjs学习札记(六-3) grid中数据的保存,添加和删除????????if?(e.field?==?"common")?{
208extjs学习札记(六-3) grid中数据的保存,添加和删除????????????if?(e.value?==?"大笨")?{
209extjs学习札记(六-3) grid中数据的保存,添加和删除????????????????Ext.Msg.alert("错误",?"大笨是人物不是植物",?function()?{?grid.startEditing(e.row,?e.column)?});
210extjs学习札记(六-3) grid中数据的保存,添加和删除????????????}
211extjs学习札记(六-3) grid中数据的保存,添加和删除????????}
212extjs学习札记(六-3) grid中数据的保存,添加和删除????}
213extjs学习札记(六-3) grid中数据的保存,添加和删除});

??? 再运行一下看看,OK,我们想要的效果出来了:

extjs学习札记(六-3) grid中数据的保存,添加和删除

??? 最后我们来总结一下,当修改grid中的内容时,Store类的modified会自动将被修改的行保存下来;当删除的时候,Store类给我们提供了一个 removed属性,但不知道为什么不自动保存删除的行,不过自己添加也很简单;增加是最麻烦的,我们可能需要一些小技巧来保存添加的行,无论是修改的还是未修改的,可以都放到Store类的modified属性之中,也可以放在自己建的一个集合中,但是需要从modified里边去被添加之后修改的行。无论是编辑,增加或者删除操作,都是在本地进行,需要自己写代码将改动发送到服务器端进行处理。

热点排行