参照Bindows Samples的ChartTest2.xml
代码:
1
/// <summary>
2
/// 生成随机颜色数组
3
/// </summary>
4
/// <param name="ColorCount">随机颜色的个数</param>
5
/// <returns>随机颜色数组</returns>
6
private System.Collections.ArrayList RndColor(int ColorCount)
7
{
8
9
System.Collections.ArrayList al = new System.Collections.ArrayList();
10
11
System.Collections.ArrayList alColor = new System.Collections.ArrayList();
12
13
al.Add(System.Drawing.Color.Crimson);
14
al.Add(System.Drawing.Color.DeepPink);
15
al.Add(System.Drawing.Color.DarkMagenta);
16
al.Add(System.Drawing.Color.DarkViolet);
17
al.Add(System.Drawing.Color.Indigo);
18
al.Add(System.Drawing.Color.DarkSlateBlue);
19
al.Add(System.Drawing.Color.Blue);
20
al.Add(System.Drawing.Color.MidnightBlue);
21
al.Add(System.Drawing.Color.RoyalBlue);
22
al.Add(System.Drawing.Color.DodgerBlue);
23
al.Add(System.Drawing.Color.SteelBlue);
24
al.Add(System.Drawing.Color.CadetBlue);
25
al.Add(System.Drawing.Color.DarkSlateGray);
26
al.Add(System.Drawing.Color.Teal);
27
al.Add(System.Drawing.Color.SeaGreen);
28
al.Add(System.Drawing.Color.Green);
29
al.Add(System.Drawing.Color.DarkGreen);
30
al.Add(System.Drawing.Color.OliveDrab);
31
al.Add(System.Drawing.Color.Olive);
32
al.Add(System.Drawing.Color.Gold);
33
al.Add(System.Drawing.Color.Goldenrod);
34
al.Add(System.Drawing.Color.Orange);
35
al.Add(System.Drawing.Color.DarkOrange);
36
al.Add(System.Drawing.Color.Chocolate);
37
al.Add(System.Drawing.Color.Sienna);
38
al.Add(System.Drawing.Color.OrangeRed);
39
al.Add(System.Drawing.Color.Tomato);
40
al.Add(System.Drawing.Color.Red);
41
al.Add(System.Drawing.Color.Brown);
42
al.Add(System.Drawing.Color.DimGray);
43
44
int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数
45
46
//采用一个简单的算法以保证生成随机颜色的不同
47
Random rand =new Random();
48
for ( int i = 1 ; i < ColorCount + 1 ; i++ )
49
{
50
if ( temp != -1)
51
{
52
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
53
}
54
int t = rand.Next(30);
55
if (temp != -1 && temp == t)
56
{
57
return RndColor(ColorCount);
58
}
59
60
temp = t ;
61
62
alColor.Add(al[t]);
63
64
}
65
66
return alColor;
67
68
}
69
70
71
72
73
74
75
76
/// <summary>
77
/// 多种类型图表的调用文件
78
/// </summary>
79
/// <param name="标题">Bindows窗体的标题</param>
80
/// <param name="宽度">Bindows窗体的宽度</param>
81
/// <param name="高度">Bindows窗体的高度</param>
82
/// <param name="附属文件名">此主文件调用的数据文件的文件名的前半部分</param>
83
/// <returns>生成主文件时的TimeStamp,供生成数据文件的文件名使用</returns>
84
private string AllChartMain(string 标题, int 宽度, int 高度, string 附属文件名)
85
{
86
System.Text.StringBuilder sbContent = new System.Text.StringBuilder(100);
87
88
sbContent.Append("<?xml version=\"1.0\" ?>\n");
89
90
sbContent.Append("<application>\n");
91
92
sbContent.Append("<window caption=\"" + 标题 + "\" width=\"" + 宽度.ToString() + "\" height=\"" + 高度.ToString() + "\" centered=\"true\" />\n");
93
94
sbContent.Append("<resources>\n");
95
96
sbContent.Append("<script>\n");
97
98
sbContent.Append("<
100
string sbCN = this.CurTimeStamp();
101
102
sbContent.Append("function " + 附属文件名 + "Main" + sbCN + "() {\n");
103
104
sbContent.Append("var win = application.getWindow();\n");
105
106
sbContent.Append("var cb = new BiComboBox([\"line\", \"column\", \"bar\", \"pie\", \"grid\"]);\n");
107
108
sbContent.Append("win.add(cb);\n");
109
110
sbContent.Append("cb.setLocation(10, 10);\n");
111
112
sbContent.Append("cb.setWidth(150);\n");
113
114
sbContent.Append("var oDoc = BiXmlLoader.load( \"" + 附属文件名 + sbCN + ".xml\" );\n");
115
116
sbContent.Append("if (oDoc.parseError.errorCode != 0) {\n");
117
118
sbContent.Append("alert(\"无法分析查询到的数据!\");\n");
119
120
sbContent.Append("return;\n");
121
122
sbContent.Append("}\n");
123
124
sbContent.Append("var graph = BiGraph.fromXmlDocument(oDoc);\n");
125
126
sbContent.Append("win.add(graph);\n");
127
128
sbContent.Append("graph.update();\n");
129
130
sbContent.Append("graph.setLocation(10, cb.getHeight() + 20);\n");
131
132
sbContent.Append("graph.setRight(10);\n");
133
134
sbContent.Append("graph.setBottom(10);\n");
135
136
sbContent.Append("graph.setBorder( new BiBorder(1, \"solid\", \"black\") );\n");
137
138
sbContent.Append("graph.setBackColor(\"#cfe0f2\");\n");
139
140
sbContent.Append("cb.findString(graph.getChartType()).setSelected(true);\n");
141
142
sbContent.Append("cb.addEventListener(\"change\", function (e) {\n");
143
144
sbContent.Append("graph.setChartType(cb.getSelectedItem().getText());\n");
145
146
sbContent.Append("graph.update();\n");
147
148
sbContent.Append("}, this);\n");
149
150
sbContent.Append("oDoc = null;\n");
151
152
sbContent.Append("}\n");
153
154
sbContent.Append("" + 附属文件名 + "Main" + sbCN + ".main = function () { new " + 附属文件名 + "Main" + sbCN + "; };\n");
155
156
sbContent.Append("]]>\n");
157
158
sbContent.Append("</script>\n");
159
160
sbContent.Append("</resources>\n");
161
162
sbContent.Append("</application>\n");
163
164
string strRet = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), @"html\html\bindows\launcher\" + 附属文件名 + "Main" + sbCN + ".xml");
165
166
System.IO.StreamWriter swResult = new System.IO.StreamWriter(strRet, false, System.Text.Encoding.UTF8);
167
168
swResult.Write(sbContent.ToString());
169
170
swResult.Close();
171
172
return sbCN;
173
174
}
175
176
177
178
179
180
181
182
183
184
185
186
187
188
/// <summary>
189
/// 多种类型图表的数据文件
190
/// </summary>
191
/// <param name="视图">使用的视图</param>
192
/// <param name="中间字段">构造的视图可能要包含多余的字段,设定此值介定</param>
193
/// <param name="查询条件">视图的筛选条件</param>
194
/// <param name="图表类型">图表类型,可用Bindows提供的各种图表类型</param>
195
private void AllChart(string 标题, string 文件名, int 宽度, int 高度, string 视图, int 中间字段, string 查询条件, string 图表类型)
196
{
197
this.win = this.doc.parentWindow;
198
199
System.Text.StringBuilder sbContent = new System.Text.StringBuilder(100);
200
201
sbContent.Append("<?xml version=\"1.0\" ?>\n");
202
203
sbContent.Append("<Graph>\n");
204
205
sbContent.Append("<Data>\n");
206
207
sbContent.Append("<Categories>\n");
208
209
string strSQL = "SELECT * FROM " + 视图 + " WHERE " + 查询条件;
210
211
System.Data.DataSet dsResult = HEWin.Sys.sysDb.GetDataSetBySql(strSQL, "Result");
212
213
if (dsResult.Tables["Result"].Rows.Count == 0)
214
{
215
this.win.execScript("showMD(\"环境检测管理系统\", \"../../errnorecordset.htm\", true, false, false)", "javascript");
216
dsResult.Dispose();
217
return;
218
}
219
220
strSQL = "SELECT syscolumns.name, syscolumns.colid FROM syscolumns INNER JOIN sysobjects ON syscolumns.id = sysobjects.id WHERE (sysobjects.name = N\'" + 视图 + "\') ORDER BY syscolumns.colid";
221
222
System.Data.DataSet dsTable = HEWin.Sys.sysDb.GetDataSetBySql(strSQL, "Table");
223
224
if (dsTable.Tables["Table"].Rows.Count < 中间字段 + 1)
225
{
226
this.win.execScript("showMD(\"环境检测管理系统\", \"../../errquery.htm\", true, false, false)", "javascript");
227
dsTable.Dispose();
228
return;
229
}
230
231
int intStart = 0;
232
233
System.Collections.ArrayList alColor = this.RndColor(10);
234
235
string ChartColor = "";
236
237
for (int i = 0; i < dsResult.Tables["Result"].Rows.Count; i ++)
238
{
239
sbContent.Append("<Category Id=\"c" + i.ToString() + "\">\n");
240
sbContent.Append("<Title>" + dsResult.Tables["Result"].Rows[i][0].ToString() + "</Title>\n");
241
sbContent.Append("</Category>\n");
242
}
243
244
sbContent.Append("</Categories>\n");
245
246
sbContent.Append("<SeriesGroup>\n");
247
248
intStart = 0;
249
250
for(int i = 中间字段; i < dsTable.Tables["Table"].Rows.Count; i ++)
251
{
252
sbContent.Append("<Series Id=\"s" + intStart.ToString() + "\">\n");
253
254
sbContent.Append("<Title>" + dsTable.Tables["Table"].Rows[i]["name"].ToString() + "</Title>\n");
255
256
sbContent.Append("<Values>\n");
257
258
ChartColor += "<Chart Series=\"s" + i.ToString() + "\">\n";
259
ChartColor += "<Fill Color=\"#" + ((System.Drawing.Color)alColor[intStart]).R.ToString("X") + ((System.Drawing.Color)alColor[i]).G.ToString("X") + ((System.Drawing.Color)alColor[i]).B.ToString("X") + "\" />\n";
260
ChartColor += "</Chart>\n";
261
262
for (int j = 0; j < dsResult.Tables["Result"].Rows.Count; j ++)
263
{
264
sbContent.Append("<Value Category=\"c" + j.ToString() + "\">" + dsResult.Tables["Result"].Rows[j][i].ToString() + "</Value>");
265
}
266
267
sbContent.Append("</Values>\n");
268
269
sbContent.Append("</Series>\n");
270
271
intStart ++;
272
273
}
274
275
sbContent.Append("</SeriesGroup>\n");
276
277
sbContent.Append("</Data>\n");
278
279
sbContent.Append("<Presentation Type=\"" + 图表类型 + "\">\n");
280
281
sbContent.Append("<Legend Visible=\"true\" />\n");
282
283
sbContent.Append("<Axes>\n");
284
285
sbContent.Append("<ValueAxis Visible=\"true\" ShowMajorTicks=\"true\" ShowMinorTicks=\"false\">\n");
286
287
sbContent.Append("<Title>Value Axis Title</Title>\n");
288
289
sbContent.Append("</ValueAxis>\n");
290
291
sbContent.Append("<CategoryAxis Visible=\"true\" ShowMajorTicks=\"true\" ShowMinorTicks=\"false\">\n");
292
293
sbContent.Append("<Title>Category Axis Title</Title>");
294
295
sbContent.Append("</CategoryAxis>\n");
296
297
sbContent.Append("</Axes>\n");
298
299
sbContent.Append("<GridLines>\n");
300
301
sbContent.Append("<MajorValue Visible=\"true\"><Stroke Color=\"#cfe0f2\" />\n");
302
303
sbContent.Append("</MajorValue>\n");
304
305
sbContent.Append("<MinorValue Visible=\"false\" />\n");
306
307
sbContent.Append("<MajorCategory Visible=\"false\" />\n");
308
309
sbContent.Append("<MinorCategory Visible=\"false\" />\n");
310
311
sbContent.Append("</GridLines>\n");
312
313
sbContent.Append("<ChartArea>\n");
314
315
sbContent.Append("<Stroke Color=\"transparent\" />\n");
316
317
sbContent.Append("<Fill Color=\"#e3edf9\" Color2=\"white\" Type=\"Gradient\" />\n");
318
319
sbContent.Append("</ChartArea>\n");
320
321
sbContent.Append("<Points />\n");
322
323
sbContent.Append("<Charts>\n");
324
325
sbContent.Append(ChartColor);
326
327
sbContent.Append("</Charts>\n");
328
329
sbContent.Append("</Presentation>\n");
330
331
sbContent.Append("</Graph>\n");
332
333
string sbCN = this.AllChartMain(标题, 宽度, 高度, 文件名);
334
335
string strFileName = 文件名 + "Main" + sbCN + ".xml";
336
337
string strRet = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), @"html\html\bindows\launcher\" + 文件名 + sbCN + ".xml");
338
339
System.IO.StreamWriter swResult = new System.IO.StreamWriter(strRet, false, System.Text.Encoding.UTF8);
340
341
swResult.Write(sbContent.ToString());
342
343
swResult.Close();
344
345
win.execScript("biExec(\'../html\', \'" + strFileName + "\', false, 0, \'one\', true);", "JavaScript");
346
347
win = null;
348
349
dsTable.Dispose();
350
351
dsResult.Dispose();
352
353
}
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
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
Bindows中是有的颜色名如"DarkViolet"是不能用的,要转换为十六进制的颜色。