实体和实体的集合
这几天在研究实体和实体的集合的写法,基本上完成了数据绑定,但是还是没有完全完成
上面是实体的集合,下面是实体的写法
1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
5
namespace Entity
6
{
7
/// <summary>
8
/// 类OrderInfo的集合
9
/// </summary>
10
public class OrderInfoCollection : CollectionBase,IBindingList
11
{
12
#region CollectionBase实现
13
14
public OrderInfoCollection()
15
{
16
}
17
18
public OrderInfoCollection(OrderInfo[] value)
19
{
20
this.AddRange(value);
21
}
22
23
public OrderInfo this[int index]
24
{
25
get{return ((OrderInfo)(this.List[index]));}
26
set{List[index] = value;}
27
}
28
29
public int Add(OrderInfo value)
30
{
31
return this.List.Add(value);
32
}
33
34
public OrderInfo AddNew()
35
{
36
return (OrderInfo)((IBindingList)this).AddNew();
37
}
38
39
object IBindingList.AddNew()
40
{
41
OrderInfo c = new OrderInfo();
42
List.Add(c);
43
return c;
44
}
45
46
public void AddRange(OrderInfo[] value)
47
{
48
for (int i = 0; (i < value.Length); i = (i + 1))
49
{
50
this.Add(value[i]);
51
}
52
}
53
54
public void AddRange(OrderInfoCollection value)
55
{
56
for (int i = 0; (i < value.Count); i = (i + 1))
57
{
58
this.Add((OrderInfo)value.List[i]);
59
}
60
}
61
62
public bool Contains(OrderInfo value)
63
{
64
return this.List.Contains(value);
65
}
66
67
public void CopyTo(OrderInfo[] array, int index)
68
{
69
this.List.CopyTo(array, index);
70
}
71
72
public int IndexOf(OrderInfo value)
73
{
74
return this.List.IndexOf(value);
75
}
76
77
public void Insert(int index, OrderInfo value)
78
{
79
List.Insert(index, value);
80
}
81
82
public void Remove(OrderInfo value)
83
{
84
List.Remove(value);
85
}
86
87
public new OrderInfoCollectionEnumerator GetEnumerator()
88
{
89
return new OrderInfoCollectionEnumerator(this);
90
}
91
92
#endregion
93
94
95
#region OrderInfoCollectionEnumerator 实现
96
97
public class OrderInfoCollectionEnumerator : IEnumerator
98
{
99
private IEnumerator _enumerator;
100
private IEnumerable _temp;
101
102
public OrderInfoCollectionEnumerator(OrderInfoCollection mappings)
103
{
104
_temp = ((IEnumerable)(mappings));
105
_enumerator = _temp.GetEnumerator();
106
}
107
108
public OrderInfo Current
109
{
110
get {return ((OrderInfo)(_enumerator.Current));}
111
}
112
113
object IEnumerator.Current
114
{
115
get {return _enumerator.Current;}
116
}
117
118
public bool MoveNext()
119
{
120
return _enumerator.MoveNext();
121
}
122
123
bool IEnumerator.MoveNext()
124
{
125
return _enumerator.MoveNext();
126
}
127
128
public void Reset()
129
{
130
_enumerator.Reset();
131
}
132
133
void IEnumerator.Reset()
134
{
135
_enumerator.Reset();
136
}
137
}
138
#endregion
139
140
141
#region IBindingList 成员
142
143
private ListChangedEventArgs resetEvent = new ListChangedEventArgs(ListChangedType.Reset, -1);
144
private ListChangedEventHandler onListChanged;
145
146
public bool AllowEdit
147
{
148
get {return true;}
149
}
150
151
public bool AllowNew
152
{
153
get {return true;}
154
}
155
156
public bool AllowRemove
157
{
158
get {return true;}
159
}
160
161
public bool SupportsChangeNotification
162
{
163
get {return true;}
164
}
165
166
public bool SupportsSearching
167
{
168
get {return false;}
169
}
170
171
public bool SupportsSorting
172
{
173
get {return false;}
174
}
175
176
public void AddIndex(PropertyDescriptor property)
177
{
178
throw new NotSupportedException();
179
}
180
public void ApplySort(PropertyDescriptor property, System.ComponentModel.ListSortDirection direction)
181
{
182
throw new NotSupportedException();
183
}
184
public PropertyDescriptor SortProperty
185
{
186
get{throw new NotSupportedException();
187
//return null;
188
}
189
}
190
public int Find(PropertyDescriptor property, object key)
191
{
192
throw new NotSupportedException();
193
//return 0;
194
}
195
public void RemoveSort()
196
{
197
throw new NotSupportedException();
198
}
199
public void RemoveIndex(PropertyDescriptor property)
200
{
201
throw new NotSupportedException();
202
}
203
public bool IsSorted
204
{
205
get { throw new NotSupportedException();
206
//return false;
207
}
208
}
209
public System.ComponentModel.ListSortDirection SortDirection
210
{
211
get{throw new NotSupportedException();
212
//return new System.ComponentModel.ListSortDirection ();
213
}
214
}
215
public event ListChangedEventHandler ListChanged
216
{
217
add{onListChanged += value;}
218
remove{onListChanged -= value;}
219
}
220
221
protected virtual void OnListChanged(ListChangedEventArgs ev)
222
{
223
if (onListChanged != null)
224
{
225
onListChanged(this, ev);
226
}
227
}
228
protected override void OnClearComplete()
229
{
230
OnListChanged(resetEvent);
231
}
232
private void RemoveChild(Object source, OrderInfo.OrderInfoEventArgs e)
233
{
234
List.Remove(source);
235
}
236
protected override void OnInsertComplete(int index, object value)
237
{
238
((OrderInfo)(value)).RemoveMe += new OrderInfo.OrderInfoEventHandler(RemoveChild);
239
OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, index));
240
}
241
protected override void OnRemoveComplete(int index, object value)
242
{
243
OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, index));
244
}
245
protected override void OnSetComplete(int index, object oldValue, object newValue)
246
{
247
if (oldValue != newValue)
248
{
249
OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, index));
250
}
251
}
252
253
#endregion
254
}
255
}

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

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

上面是实体的集合,下面是实体的写法
1
using System;
2
using System.Data;
3
using System.Collections;
4
using System.ComponentModel;
5
6
namespace Entity
7
{
8
/// <summary>
9
/// Order的描述
10
/// </summary>
11
public class OrderInfo : IEditableObject,IDataErrorInfo
12
{
13
14
#region 实体 结构体
15
/// <summary>
16
/// 类OrderInfo的实体结构体
17
/// </summary>
18
struct OrderInfoData
19
{
20
internal string _id;
21
internal string _name;
22
}
23
24
#endregion
25
26
27
#region 私有变量
28
29
private OrderInfoData custData; //类实体的值
30
private OrderInfoData backupData; //类实体的备份值(用于CancelEdit的时候的恢复)
31
private bool mEditing = false; //是否处于编辑状态
32
private bool mIsNew = true; //是否是新建状态
33
34
#endregion
35
36
37
#region 构造函数
38
39
/// <summary>
40
/// 默认构造函数
41
/// </summary>
42
public OrderInfo():base()
43
{
44
this.custData = new OrderInfoData();
45
this.custData._id = "";
46
this.custData._name = "";
47
}
48
49
50
/// <summary>
51
/// 构造函数,所有公开属性赋值
52
/// </summary>
53
/// <param name="m_id">属性ID的描述</param>
54
/// <param name="m_name">属性Name的描述</param>
55
public OrderInfo(string m_id,string m_name)
56
{
57
this.custData = new OrderInfoData();
58
this.custData._id = m_id;
59
this.custData._name = m_name;
60
}
61
62
#endregion
63
64
65
#region 实体属性
66
67
/// <summary>
68
/// 属性ID的描述
69
/// </summary>
70
public string ID
71
{
72
get{return this.custData._id;}
73
set{this.custData._id = value;}
74
}
75
76
/// <summary>
77
/// 属性Name的描述
78
/// </summary>
79
public string Name
80
{
81
get{return this.custData._name;}
82
set{this.custData._name = value;}
83
}
84
85
86
#endregion
87
88
89
#region IEditableObject 成员
90
91
public void EndEdit()
92
{
93
if (mEditing)
94
{
95
mEditing = false;
96
mIsNew = false;
97
}
98
}
99
100
internal class OrderInfoEventArgs : EventArgs
101
{
102
// 定义事件成员,用于提供有关事件的信息
103
}
104
internal delegate void OrderInfoEventHandler(Object source, OrderInfoEventArgs e);
105
internal event OrderInfoEventHandler RemoveMe;
106
public void CancelEdit()
107
{
108
if (mEditing)
109
{
110
mEditing = false;
111
this.custData = backupData;
112
if(mIsNew)
113
{
114
mIsNew = false;
115
RemoveMe(this, new OrderInfoEventArgs());
116
}
117
}
118
}
119
120
public void BeginEdit()
121
{
122
if (!mEditing)
123
{
124
mEditing = true;
125
this.backupData = custData;
126
}
127
}
128
129
#endregion
130
131
132
#region IDataErrorInfo 成员
133
134
public string Error
135
{
136
get{return "";}
137
}
138
139
public string this[string strErrorName]
140
{
141
get{return "";}
142
}
143
144
#endregion
145
}
146
}

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

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146
