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

终于项目到了报表生成部分了。考虑用水晶报表,但是水晶报表功能太多,太复杂,所以就没有是使用了。

花了大下午的时候,做好了风格,有点类似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"800350);    
        imgbb.Src 
= "./reportImg/safeExam.gif"
;    
        abb.HRef 
= "./reportImg/safeExam.gif"
;    
        divPicReport.Visible 
= true
;    
}
 

最终效果图:

大小: 49.21 K
尺寸: 500 x 349
浏览: 49 次
点击打开新窗口浏览全图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值