您的位置:首页 > 其它

项目开发 - 使用OWC生成统计图

2008-05-11 21:08 447 查看
终于项目到了报表生成部分了。考虑用水晶报表,但是水晶报表功能太多,太复杂,所以就没有是使用了。

花了大下午的时候,做好了风格,有点类似sablog 的后台管理。然后写统计逻辑。

写了几个函数,主统计函数返回统计结果(DataTable)封装。结果包括了:


//获取表格内容格式


protected DataTable getTableFormat()




...{


DataTable dt = new DataTable();


dt.Columns.Add("id");


dt.Columns.Add("name");


dt.Columns.Add("job");


dt.Columns.Add("safePoint");


dt.Columns.Add("sanweiPoint");


dt.Columns.Add("hiddenDangerPoint");


dt.Columns.Add("accidentPoint");


dt.Columns.Add("totlePoint");


return dt;


}

用GridView显示了全部数据,接着就是考虑做图形统计信息了。

要求使用柱状图,以员工名称为横坐标,totlePoint为纵坐标生成。在网上翻了很久,终于想起来了,以前记得使用OWC貌似可以很轻松地生成图形。

OWC 全称 Office Web Components 是微软随Office提供的绘图控件,使用它能够绘制绝大部分的图形。因为OWC是com封装的,所以在.net里面需要添加com组件到项目里面方可使用。

于是就在M$网站上下载了OWC11开发包,安装上了。同时在网上找了个示例代码来研究。

在调试了几个很SB的BUG后,结果终于出炉了。嘿嘿,代码如下:


protected void btnDo_OnClick(object sender, EventArgs e)




...{


DateTime startDate, endDate;


startDate = DateTime.Parse(txtStartDate.Text);


endDate = DateTime.Parse(txtEndDate.Text);


lblNyr.Text = startDate.Year + "年" + startDate.Month + "月" + startDate.Day + "日 - " + endDate.Year + "年" + endDate.Month + "月" + endDate.Day + "日";


lblNyr.Visible = true;


DataTable dt = executeReportOfExam();


gvReport.DataSource = dt;


gvReport.DataBind();




//创建ChartSpace对象来放置图表


OWC11.ChartSpace objCSpace = new ChartSpaceClass();


//在ChartSpace对象中添加图表,Add方法返回chart对象


OWC11.ChChart objChart = objCSpace.Charts.Add(0);


//指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到


objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeColumnClustered;


//制定图标是否需要图例


objChart.HasLegend = true;


objChart.Legend.Font.Size = 10;


//给定标题


objChart.HasTitle = true;


objChart.Title.Caption = "干部安全绩效考核("+lblNyr.Text+")";


objChart.Title.Font.Color = "red";


objChart.Title.Font.Bold = true;


objChart.Title.Font.Size = 12;


//给定x,y卓的图例


objChart.Axes[0].HasTitle = true;


objChart.Axes[0].Title.Caption = "员工";


objChart.Axes[0].Title.Font.Color = "blue";


objChart.Axes[0].Title.Font.Size = 10;


objChart.Axes[0].Font.Size = 9;


objChart.Axes[1].HasTitle = true;


objChart.Axes[1].Title.Caption = "合计得分";


objChart.Axes[1].Title.Font.Color = "blue";


objChart.Axes[1].Title.Font.Size = 10;




//计算数据




/**//*categories 和 values 可以用tab分割的字符串来表示*/


String x="";


String y="";


String sn="得分";


for (Int32 i = 0; i < dt.Rows.Count; ++i)




...{


x += dt.Rows[i]["name"].ToString() + " ";


y += dt.Rows[i]["totlePoint"].ToString() + " ";


}


objChart.SeriesCollection.Add(0);


//添加一个series的名字


objChart.SeriesCollection[0].SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames, (int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, sn);


//给定分类


objChart.SeriesCollection[0].SetData(OWC11.ChartDimensionsEnum.chDimCategories, (int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, x);


//给定值


objChart.SeriesCollection[0].SetData(OWC11.ChartDimensionsEnum.chDimValues, (int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, y);


//输出到GIF文件


String path = (Server.MapPath("./reportImg/")) + @"safeExam.gif";


//类型,长宽


objCSpace.ExportPicture(path, "GIF", 800, 350);


imgbb.Src = "./reportImg/safeExam.gif";


abb.HRef = "./reportImg/safeExam.gif";


divPicReport.Visible = true;


}

最终效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐