項目中有報表圖形化的需求, 于是開始在網(wǎng)上找第三方chart控件。因時間緊迫,在CSDN中搜了幾輪后大至確定了幾個候選:
一、Office帶的OWC控件;二、ComponentOne;三、Web Chart。
OWC似乎使用者居多,但看見有網(wǎng)友在帖中抱怨OWC在使用時需要許可證書,于是將其排除,我可不想BOSS在看報表時彈出一個“沒有許可證書”的窗口。
接著找到了ComponentOne的Web chart做出的各種效果圖,效果極佳。我一下子被迷住了,決定就是它,于是馬不停蹄的下了最新版100多M的安裝文件,又花一上午找了個可以用的注冊碼,再找了篇教程,OK萬事俱備,興匆匆的開始寫代碼。需求不復(fù)雜,在一個頁面上畫出多條折線圖即可,根據(jù)以往經(jīng)驗,這種大型商業(yè)共享軟件在官方站點上看兩個Example頂多一小時絕對能搞定的。但結(jié)果讓我非常的惱火,官方的Example簡單的它偏不提供,弄些什么AJAX的,一大堆實現(xiàn)輔助效果的代碼,你要找的核心的那三四行打死也找不到,好像就怕你一下子把它的Example看明白了。歷來討厭這種軟件。于是卸載、刪除......等全部弄完,一天過去了。
還好,后來找到了Web Chart。代碼超簡潔,效果也還不錯,寫些簡單的示例供大家參考:
一、折線圖
//引用命名空間
using WebChart;
//定義一個顏色數(shù)組,供循環(huán)時為不同的記錄填充不同的顏色
private string[] myColor = new string[]
{
"Tomato",//西紅柿
"Black",
"Gold",
"Blue",
"Green",
"Orange",
"Pink",//粉紅
"Violet",//紫羅蘭
"Orchid",//淡紫色
"Lime",//亮綠
"Tan",//茶色
"Red",
"Navy"//橘紅
};
//用靜態(tài)方式示例了畫出一條兩個點的最簡單折線.實際項目據(jù)此做循環(huán)而以.
private void doIt()
{
//創(chuàng)建折線對象
LineChart myChart = new LineChart();
//為折線填充顏色
myChart.Line.Color = Color.FromName(myColor[0]);
myChart.Fill.Color = Color.FromName(myColor[0]);
myChart.LineMarker = new DiamondLineMarker(8, Color.FromName(myColor[0]), Color.FromName(myColor[0]));
//圖例說明
myChart.Legend = "折線一";
//添加第一個點,參數(shù)一為x座標上的名稱,參數(shù)二為y座標上的值
myChart.Data.Add(new ChartPoint("一", float.Parse("100")));
//添加第二個點
myChart.Data.Add(new ChartPoint("二", float.Parse("200")));
//chart為控件ID
this.chart.Charts.Add(myChart);
this.chart.RedrawChart();
}
二、柱狀圖
//顏色數(shù)組
private string[] myColor = new string[]
{
"Fuchsia",
"Black",
"Gold",
"Blue",
"HotPink",
"Orange",
"Peru",
"DodgerBlue",
"Lime",
"Tan",
"Red",
"GreenYellow",
"DarkGreen",
"DimGray",
"Orchid"
};
//調(diào)用該方法生成柱狀圖
private void bindchart()
{
//獲取一個DataTable,具體函數(shù)略...
DataTable dt = this.getdt();
if (dt != null)
{
if (dt.Rows.Count > 0)
{
//遍歷DataTable為每條記錄生成一個柱狀
for (int i = 0; i < dt.Rows.Count; i++)
{
//創(chuàng)建對象
ColumnChart mychart = new ColumnChart();
//設(shè)置柱子寬度
mychart.MaxColumnWidth = 48;
//顏色
mychart.Fill.Color = Color.FromName(this.myColor[i]);
//在柱子上顯示數(shù)量
mychart.DataLabels.Visible = true;
//數(shù)量的字體
mychart.DataLabels.Font = new Font("Verdana", 14);
//添加
mychart.Data.Add(new ChartPoint("", float.Parse(dt.Rows[i]["num"].ToString())));
//備注
mychart.Legend = dt.Rows[i]["name"].ToString();
this.chart.Charts.Add(mychart);
}
//輔助設(shè)置
//背景色
chart.Background.Color = Color.FromArgb(165, 0, 16);
chart.YAxisFont.ForeColor = Color.FromArgb(165, 0, 16);
chart.XAxisFont.ForeColor = Color.FromArgb(165, 0, 16);
//內(nèi)部線條
chart.Border.Color = Color.FromArgb(200, 200, 200);
//邊框樣式
chart.BorderStyle = BorderStyle.None;
//y最大值
double max = double.Parse(dt.Compute("MAX(num)","").ToString());
//遞增值
int intv = 2;
//數(shù)量小于16的情況
if (max < 16)
{
max = 16;
}
//大于16的情況
else
{
intv = int.Parse(Math.Ceiling(max/8).ToString());
max += intv;
}
//設(shè)置Y軸終點值
chart.YCustomEnd = int.Parse(max.ToString());
//y遞增值
chart.YValuesInterval = intv;
//生成
this.chart.RedrawChart();
}
}
}
Web Chart為免費控件,需要的朋友可去官方地址下載:http://www.carlosag.net/Tools/WebChart/Default.aspx,上面還有很多效果和代碼示例