轉帖|其它|編輯:郝浩|2010-08-30 13:46:29.000|閱讀 1226 次
概述:項目中有報表圖形化的需求, 于是開始在網上找第三方chart控件。因時間緊迫,大至確定了幾個候選:一、Office帶的OWC控件;二、ComponentOne;三、Web Chart。本文將講解ASP.NET報表控件。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
項目中有報表圖形化的需求, 于是開始在網上找第三方chart控件。因時間緊迫,大至確定了幾個候選:一、Office帶的OWC控件;二、ComponentOne;三、Web Chart。本文將講解ASP.NET報表控件。
OWC似乎使用者居多,但看見有網友在帖中抱怨OWC在使用時需要許可證書,于是將其排除,我可不想BOSS在看報表時彈出一個“沒有許可證書”的窗口。
接著找到了ComponentOne的Web chart做出的各種效果圖,效果極佳。我一下子被迷住了,決定就是它,于是馬不停蹄的下了最新版100多M的安裝文件,又花一上午找了個可以用的注冊碼,再找了篇教程,OK萬事俱備,興匆匆的開始寫代碼。需求不復雜,在一個頁面上畫出多條折線圖即可,根據以往經驗,這種大型商業共享軟件在官方站點上看兩個Example頂多一小時絕對能搞定的。但結果讓我非常的惱火,官方的Example簡單的它偏不提供,弄些什么AJAX的,一大堆實現輔助效果的代碼,你要找的核心的那三四行打死也找不到,好像就怕你一下子把它的Example看明白了。歷來討厭這種軟件。于是卸載、刪除......等全部弄完,一天過去了。
還好,后來找到了Web Chart。代碼超簡潔,效果也還不錯,寫些簡單的ASP.NET報表控件示例供大家參考:
ASP.NET報表控件一、折線圖
1.//引用命名空間
2.using WebChart;
3.
4.//定義一個顏色數組,供循環時為不同的記錄填充不同的顏色
5.private string[] myColor = new string[]
6.{
7. "Tomato",//西紅柿
8. "Black",
9. "Gold",
10. "Blue",
11. "Green",
12. "Orange",
13. "Pink",//粉紅
14. "Violet",//紫羅蘭
15. "Orchid",//淡紫色
16. "Lime",//亮綠
17. "Tan",//茶色
18. "Red",
19. "Navy"//橘紅
20.};
21.
22.//用靜態方式示例了畫出一條兩個點的最簡單折線.實際項目據此做循環而以.
23.private void doIt()
24.{
25. //創建折線對象
26. LineChart myChart = new LineChart();
27. //為折線填充顏色
28. myChart.Line.Color = Color.FromName(myColor[0]);
29. myChart.Fill.Color = Color.FromName(myColor[0]);
30. myChart.LineMarker = new DiamondLineMarker(8, Color.FromName(myColor[0]), Color.FromName(myColor[0]));
31. //圖例說明
32. myChart.Legend = "折線一";
33. //添加第一個點,參數一為x座標上的名稱,參數二為y座標上的值
34. myChart.Data.Add(new ChartPoint("一", float.Parse("100")));
35. //添加第二個點
36. myChart.Data.Add(new ChartPoint("二", float.Parse("200")));
37. //chart為控件ID
38. this.chart.Charts.Add(myChart);
39. this.chart.RedrawChart();
40.}
ASP.NET報表控件二、柱狀圖
41.//顏色數組
42.private string[] myColor = new string[]
43.{
44. "Fuchsia",
45. "Black",
46. "Gold",
47. "Blue",
48. "HotPink",
49. "Orange",
50. "Peru",
51. "DodgerBlue",
52. "Lime",
53. "Tan",
54. "Red",
55. "GreenYellow",
56. "DarkGreen",
57. "DimGray",
58. "Orchid"
59.};
60.
61.//調用該方法生成柱狀圖
62.private void bindchart()
63.{
64. //獲取一個DataTable,具體函數略...
65. DataTable dt = this.getdt();
66. if (dt != null)
67. {
68. if (dt.Rows.Count > 0)
69. {
70. //遍歷DataTable為每條記錄生成一個柱狀
71. for (int i = 0; i < dt.Rows.Count; i++)
72. {
73. //創建對象
74. ColumnChart mychart = new ColumnChart();
75. //設置柱子寬度
76. mychart.MaxColumnWidth = 48;
77. //顏色
78. mychart.Fill.Color = Color.FromName(this.myColor[i]);
79. //在柱子上顯示數量
80. mychart.DataLabels.Visible = true;
81. //數量的字體
82. mychart.DataLabels.Font = new Font("Verdana", 14);
83. //添加
84. mychart.Data.Add(new ChartPoint("", float.Parse(dt.Rows[i]["num"].ToString())));
85. //備注
86. mychart.Legend = dt.Rows[i]["name"].ToString();
87. this.chart.Charts.Add(mychart);
88. }
89. //輔助設置
90. //背景色
91. chart.Background.Color = Color.FromArgb(165, 0, 16);
92. chart.YAxisFont.ForeColor = Color.FromArgb(165, 0, 16);
93. chart.XAxisFont.ForeColor = Color.FromArgb(165, 0, 16);
94. //內部線條
95. chart.Border.Color = Color.FromArgb(200, 200, 200);
96. //邊框樣式
97. chart.BorderStyle = BorderStyle.None;
98. //y最大值
99. double max = double.Parse(dt.Compute("MAX(num)","").ToString());
100. //遞增值
101. int intv = 2;
102.
103. //數量小于16的情況
104. if (max < 16)
105. {
106. max = 16;
107. }
108. //大于16的情況
109. else
110. {
111. intintv = int.Parse(Math.Ceiling(max/8).ToString());
112. max += intv;
113. }
114.
115. //設置Y軸終點值
116. chart.YCustomEnd = int.Parse(max.ToString());
117. //y遞增值
118. chart.YValuesInterval = intv;
119.
120. //生成
121. this.chart.RedrawChart();
122. }
123. }
124.}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載