1
using System.Collections ;
2
using System.Data ;
3
using BusinessEntity;
4
using PersistenceLayer;
5
using DevExpress.XtraTreeList ;
6
using DevExpress.XtraTreeList.Nodes ;
7
using DevExpress.XtraTreeList.Columns ;
8
namespace NskProject
9
{
10
/// <summary>
11
/// 一些实现或辅助绑定TreeList的静态方法。
12
/// </summary>
13
public class BindTreeList
14
{
15
/// <summary>
16
/// 初级绑定方法,给定的表中有父子关系的字字段,默认情况下表内所有字段都被绑定到控件内
17
/// </summary>
18
/// <param name="Dt">数据源表</param>
19
/// <param name="Ti">需要绑定的控件</param>
20
public static void SimpleMode(DataTable Dt,TreeList Ti)
21
{
22
if(ParentFieldName==null && ChildFieldName==null)
23
{
24
return;
25
}
26
27
Ti.ParentFieldName=ParentFieldName;
28
Ti.KeyFieldName=ChildFieldName;
29
Ti.DataSource=Dt;
30
Ti.PopulateColumns();
31
return;
32
}
33
/// <summary>
34
/// 初级绑定方法:在前一方法的基础上增加了将某一字段加入到Tag属性中去。保存附加信息
35
/// 该表在赋值前以父节点为基础进行了排序
36
/// </summary>
37
/// <param name="Dt">数据源表</param>
38
/// <param name="TagColum">附加到Tag属性中的字段</param>
39
/// <param name="Ti">需要绑定的控件</param>
40
public static void SimpleMode(DataTable Dt,DataColumn TagColumn,TreeList Ti)
41
{
42
if(ParentFieldName==null && ChildFieldName==null)
43
{
44
return;
45
}
46
int TagColumnIndex=Dt.Columns.IndexOf(TagColumn);
47
foreach(DataRow dr in Dt.Rows)
48
{
49
object[] Data=new object[Dt.Columns.Count-3];
50
object Tag=new object() ;
51
Object[]Source=dr.ItemArray;
52
int count=0;
53
//显示数据与附加数据分离
54
for(int i=0;i<Source.Length;i++)
55
{
56
if(i!=TagColumnIndex &&i!=-1)
57
{
58
Data[count]=Source[count];
59
count++;
60
}
61
else
62
{
63
Tag=Source[i];
64
}
65
}
66
int ParentID=Convert.ToInt32(dr[ParentFieldName]);
67
int ChildID=Convert.ToInt32(dr[ChildFieldName]);
68
int Balance=0;
69
if(ParentID==0)
70
{
71
TreeListNode Node=Ti.AppendNode(Data,null);
72
Node.Tag=Tag;
73
if(Node.Id!=ChildID)
74
{
75
Balance=ChildID;
76
//可能存在只取一部分数据的情况,在这种情况下,取控件内ID与表内ID之间的差额
77
}
78
}
79
else
80
{
81
TreeListNode ParentNode;
82
if(Balance>0)//两种不同情况的取得父节点的方法
83
{
84
ParentNode=Ti.FindNodeByID(ParentID-Balance);
85
}
86
else
87
{
88
ParentNode=Ti.FindNodeByID(ParentID-1);
89
}
90
if(ParentNode!=null)
91
{
92
TreeListNode Node=Ti.AppendNode(Data,ParentNode);
93
Node.Tag=Tag;
94
}
95
}
96
}
97
}
98
/// <summary>
99
/// 针对有时候并不是加载一张表内的所有内容,对此加以变形,对于存在于表中不在列表内的字段
100
/// 给删除,对于不在表内而在列表内的值赋空值加入列表内
101
/// </summary>
102
/// <param name="Dt">数据源表</param>
103
/// <param name="FieldList">需要在TreeList中显示的字段列表</param>
104
/// <param name="Ti">需要绑定的控件</param>
105
public static void SimpleMode(DataTable Dt,string Fields,TreeList Ti)
106
{
107
Ti.Nodes.Clear();
108
int Balance=0;
109
string[] FieldList=Fields.Split(",".ToCharArray());
110
if(ParentFieldName==null && ChildFieldName==null)
111
{
112
return;
113
}
114
foreach(DataRow dr in Dt.Rows)
115
{
116
int index=0;
117
Object[] Data=new object[FieldList.Length];
118
foreach(string o in FieldList)
119
{
120
if(Dt.Columns.IndexOf(o)>-1)
121
{
122
string n=dr[o].ToString().Trim();
123
Data[index]=n;
124
}
125
else
126
{
127
Data[index]="";
128
}
129
index++;
130
}
131
132
int ParentID=Convert.ToInt32(dr[ParentFieldName]);
133
int ChildID=Convert.ToInt32(dr[ChildFieldName]);
134
135
if(ParentID==0)
136
{
137
TreeListNode Node=Ti.AppendNode(Data,null);
138
if(Node.Id!=ChildID-1)
139
{
140
Balance=Node.Id<ChildID?ChildID-Node.Id:Node.Id-ChildID;
141
//可能存在只取一部分数据的情况,在这种情况下,取控件内ID与表内ID之间的差额
142
}
143
}
144
else
145
{
146
TreeListNode ParentNode;
147
if(Balance>0)//两种不同情况的取得父节点的方法
148
{
149
ParentNode=Ti.FindNodeByID(ParentID-Balance);
150
}
151
else
152
{
153
ParentNode=Ti.FindNodeByID(ParentID-1);
154
}
155
if(ParentNode!=null)
156
{
157
TreeListNode Node=Ti.AppendNode(Data,ParentNode);
158
159
}
160
}
161
}
162
}
163
/// <summary>
164
///
165
/// </summary>
166
/// <param name="Dt"></param>
167
/// <param name="Fields"></param>
168
/// <param name="Ti"></param>
169
/// <param name="TagColumn"></param>
170
public static void SimpleMode(DataTable Dt,string Fields,TreeList Ti,string TagColumn)
171
{
172
Ti.Nodes.Clear();
173
int Balance=0;
174
string[] FieldList=Fields.Split(",".ToCharArray());
175
if(ParentFieldName==null && ChildFieldName==null)
176
{
177
return;
178
}
179
foreach(DataRow dr in Dt.Rows)
180
{
181
int index=0;
182
Object[] Data=new object[FieldList.Length];
183
foreach(string o in FieldList)
184
{
185
if(o!=TagColumn && Dt.Columns.IndexOf(o)>-1)
186
{
187
string n=dr[o].ToString().Trim();
188
Data[index]=n;
189
}
190
else
191
{
192
Data[index]="";
193
}
194
index++;
195
}
196
197
int ParentID=Convert.ToInt32(dr[ParentFieldName]);
198
int ChildID=Convert.ToInt32(dr[ChildFieldName]);
199
200
if(ParentID==0)
201
{
202
TreeListNode Node=Ti.AppendNode(Data,null);
203
Node.Tag =dr[TagColumn];
204
if(Node.Id!=ChildID)
205
{
206
Balance=ChildID;
207
//可能存在只取一部分数据的情况,在这种情况下,取控件内ID与表内ID之间的差额
208
}
209
}
210
else
211
{
212
TreeListNode ParentNode;
213
if(Balance>0)//两种不同情况的取得父节点的方法
214
{
215
ParentNode=Ti.FindNodeByID(ParentID-Balance);
216
}
217
else
218
{
219
ParentNode=Ti.FindNodeByID(ParentID-1);
220
}
221
if(ParentNode!=null)
222
{
223
TreeListNode Node=Ti.AppendNode(Data,ParentNode);
224
Node.Tag =dr[TagColumn];
225
226
}
227
}
228
}
229
}
230
private static string _ParentFieldName="";
231
private static string _ChildFieldName="";
232
public static string ParentFieldName
233
{
234
get{return _ParentFieldName;}
235
set{_ParentFieldName=value;}
236
}
237
238
public static string ChildFieldName
239
{
240
get{return _ChildFieldName;}
241
set{_ChildFieldName=value;}
242
}
243
244
}
245
}
246
这是一个静态方法,在执行SimpleBind方法前。必须对ChildFieldName和ParentFieldName进行赋值,它们对应着Dt中的父子节点的列名。

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
