大多数时候,我们只是使用grid来显示信息,但有时也需要在grid中对信息进行编辑。在extjs中,构造一个可编辑的grid非常方便。
我们来看下Ext.grid.EditorGridPanel,该类从GridPanel继承而来,通过对列提供editor进行编辑。在前边的例子中,我们用过renderer函数,知道可以把数据显示成我们希望的样子,而在编辑的时候,我们其实是针对的原始数据。另外,我们在编辑的时候,通常希望能够对用户的输入进行控制而不是任由用户随心所欲的输入,Ext.form命名空间有一些类能够对用户输入进行一些基本的控制,我们会在下边的代码中看到,这里我再次强调一下,在向服务器提交数据之前和数据在服务器进行处理之前,必须要进行数据的有效性验证。由于对grid已经比较熟悉了,下边就直接给出代码了:
<!--<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
});
118
119
// 触发数据的加载
120
store.load();
121
}
);

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



32

33

34

35

36

37



38

39

40



41

42

43

44



45

46

47

48

49

50

51



52

53

54

55

56

57



58

59

60

61

62



63

64

65

66

67



68

69

70

71

72

73

74

75

76



77

78

79

80

81

82

83



84

85

86

87

88



89

90

91

92

93



94



95



96



97



98



99

100

101

102



103

104

105

106



107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

我们在前边的系列中使用过数据和json来作为数据保存或者传递的格式,考虑到xml也很常用,这次我们使用了xml文件,内容如下:



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
