在上一个系列当中,我们学习了如何对grid中的内容进行编辑,但是编辑的结果我们并没有保存,这在实际的应用中是没有什么意义的。在有些情况下,除了编辑之外,还要通过grid进行数据的增加和删除,这两个操作也涉及到对于数据的保存。在这个系列里边,我们将学习如何保存数据以及通过grid对数据进行增加和删除。
我们在前边的学习过程中已经知道,grid其实只是显示数据,它通过配置参数store来获得数据,这个参数需要的是Store类或者其子类的一个对象,里边封装了我们需要的数据。我们现在应该已经比较熟悉Store类了,这次我们需要使用它的一个属性modified,里边保存了被修改过的记录的集合。我们通过把上个系列中的例子改变一下来看看如何保存数据:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
1
//
/<reference path="vswd-ext_2.0.2.js" />
2
/**/
/*
3
*作者:大笨
4
*日期:2009-10-20
5
*版本:1.0
6
*博客地址:http://yage.cnblogs.com
7
*QQ:14202190
8
*/
9
Ext.BLANK_IMAGE_URL
=
'
../extjs/resources/images/default/s.gif
'
;
10
11
Ext.onReady(
function
()
{
12
Ext.QuickTips.init();
13
14
//格式化日期
15
function formatDate(value)
{
16
return value ? value.dateFormat('Y年m月d日') : '';
17
}
18
19
// 别名
20
var fm = Ext.form;
21
22
//构造一个只能包含checkbox的列
23
var checkColumn = new Ext.grid.CheckColumn(
{
24
header: 'Indoor?',
25
dataIndex: 'indoor',
26
width: 55
27
});
28
29
// 构造ColumnModel
30
var cm = new Ext.grid.ColumnModel(
{
31
columns: [
{
32
id: 'common',
33
header: 'Common Name',
34
dataIndex: 'common',
35
width: 220,
36
// 使用上边定义好的别名
37
editor: new fm.TextField(
{
38
allowBlank: false
39
})
40
},
{
41
header: 'Light',
42
dataIndex: 'light',
43
width: 130,
44
editor: new fm.ComboBox(
{
45
typeAhead: true,
46
triggerAction: 'all',
47
transform: 'light',
48
lazyRender: true,
49
listClass: 'x-combo-list-small'
50
})
51
},
{
52
header: 'Price',
53
dataIndex: 'price',
54
width: 70,
55
align: 'right',
56
renderer: 'usMoney',
57
editor: new fm.NumberField(
{
58
allowBlank: false,
59
allowNegative: false,
60
maxValue: 100000
61
})
62
},
{
63
header: 'Available',
64
dataIndex: 'availDate',
65
width: 95,
66
renderer: formatDate,
67
editor: new fm.DateField(
{
68
format: 'Y年m月d日',
69
minValue: '01/01/06',
70
disabledDays: [0, 6],
71
disabledDaysText: 'Plants are not available on the weekends'
72
})
73
},
74
checkColumn
75
],
76
defaults:
{
77
sortable: true
78
}
79
});
80
81
82
// 构造一个Store对象
83
var store = new Ext.data.Store(
{
84
85
url: 'plants.xml',
86
87
reader: new Ext.data.XmlReader(
88
{
89
record: 'plant'
90
},
91
92
[
93
{ name: 'common', type: 'string' },
94
{ name: 'botanical', type: 'string' },
95
{ name: 'light' },
96
{ name: 'price', type: 'float' },
97
{ name: 'availDate', mapping: 'availability', type: 'date', dateFormat: 'm/d/Y' },
98
{ name: 'indoor', type: 'bool' }
99
]
100
),
101
102
sortInfo:
{ field: 'common', direction: 'ASC' }
103
});
104
105
// 构造可编辑的grid
106
var grid = new Ext.grid.EditorGridPanel(
{
107
store: store,
108
cm: cm,
109
renderTo: 'grid',
110
width: 600,
111
height: 300,
112
autoExpandColumn: 'common',
113
title: 'Edit Plants?',
114
frame: true,
115
plugins: checkColumn,
116
clicksToEdit: 1,
117
listeners:
{
118
"afterEdit":
{
119
fn: afterEdit,
120
scope: this
121
}
122
},
123
tbar: [
{
124
text: "保存",
125
handler: function()
{
126
var modified = store.modified;
127
updateData(modified);
128
}
129
}]
130
});
131
132
// 触发数据的加载
133
store.load();
134
135
//发送数据到服务器端进行更新
136
function updateData(modified)
{
137
var json = [];
138
Ext.each(modified, function(item)
{
139
json.push(item.data);
140
});
141
if (json.length > 0)
{
142
Ext.Ajax.request(
{
143
url: "EditGrid.aspx",
144
params:
{ data: Ext.util.JSON.encode(json) },
145
method: "POST",
146
success: function(response)
{
147
Ext.Msg.alert("信息", "数据更新成功!", function()
{ store.reload(); });
148
},
//
/<reference path="vswd-ext_2.0.2.js" />
2

/**/
/*3
*作者:大笨4
*日期:2009-10-205
*版本:1.06
*博客地址:http://yage.cnblogs.com7
*QQ:142021908
*/
9
Ext.BLANK_IMAGE_URL
=
'
../extjs/resources/images/default/s.gif
'
;10

11

Ext.onReady(
function
()
{12
Ext.QuickTips.init();13

14
//格式化日期15

function formatDate(value)
{16
return value ? value.dateFormat('Y年m月d日') : '';17
}18

19
// 别名20
var fm = Ext.form;21

22
//构造一个只能包含checkbox的列23

var checkColumn = new Ext.grid.CheckColumn(
{24
header: 'Indoor?',25
dataIndex: 'indoor',26
width: 5527
});28

29
// 构造ColumnModel30

var cm = new Ext.grid.ColumnModel(
{31

columns: [
{32
id: 'common',33
header: 'Common Name',34
dataIndex: 'common',35
width: 220,36
// 使用上边定义好的别名37

editor: new fm.TextField(
{38
allowBlank: false39
})40

},
{41
header: 'Light',42
dataIndex: 'light',43
width: 130,44

editor: new fm.ComboBox(
{45
typeAhead: true,46
triggerAction: 'all',47
transform: 'light',48
lazyRender: true,49
listClass: 'x-combo-list-small'50
})51

},
{52
header: 'Price',53
dataIndex: 'price',54
width: 70,55
align: 'right',56
renderer: 'usMoney',57

editor: new fm.NumberField(
{58
allowBlank: false,59
allowNegative: false,60
maxValue: 10000061
})62

},
{63
header: 'Available',64
dataIndex: 'availDate',65
width: 95,66
renderer: formatDate,67

editor: new fm.DateField(
{68
format: 'Y年m月d日',69
minValue: '01/01/06',70
disabledDays: [0, 6],71
disabledDaysText: 'Plants are not available on the weekends'72
})73
},74
checkColumn75
],76

defaults:
{77
sortable: true78
}79
});80

81

82
// 构造一个Store对象83

var store = new Ext.data.Store(
{84

85
url: 'plants.xml',86

87
reader: new Ext.data.XmlReader(88

{89
record: 'plant'90
},91

92
[93

{ name: 'common', type: 'string' },94

{ name: 'botanical', type: 'string' },95

{ name: 'light' },96

{ name: 'price', type: 'float' },97

{ name: 'availDate', mapping: 'availability', type: 'date', dateFormat: 'm/d/Y' },98

{ name: 'indoor', type: 'bool' }99
]100
),101

102

sortInfo:
{ field: 'common', direction: 'ASC' }103
});104

105
// 构造可编辑的grid106

var grid = new Ext.grid.EditorGridPanel(
{107
store: store,108
cm: cm,109
renderTo: 'grid',110
width: 600,111
height: 300,112
autoExpandColumn: 'common',113
title: 'Edit Plants?',114
frame: true,115
plugins: checkColumn,116
clicksToEdit: 1,117

listeners:
{118

"afterEdit":
{119
fn: afterEdit,120
scope: this121
}122
},123

tbar: [
{124
text: "保存",125

handler: function()
{126
var modified = store.modified;127
updateData(modified);128
}129
}]130
});131

132
// 触发数据的加载133
store.load();134

135
//发送数据到服务器端进行更新136

function updateData(modified)
{137
var json = [];138

Ext.each(modified, function(item)
{139
json.push(item.data);140
});141

if (json.length > 0)
{142

Ext.Ajax.request(
{143
url: "EditGrid.aspx",144

params:
{ data: Ext.util.JSON.encode(json) },145
method: "POST",146

success: function(response)
{147

Ext.Msg.alert("信息", "数据更新成功!", function()
{ store.reload(); });148
},
ExtJS网格编辑保存
2266

被折叠的 条评论
为什么被折叠?



