首页 > 编程 > .NET > 正文

ASP.Net生成业务数据的统计图形

2024-07-10 12:55:05
字体:
来源:转载
供稿:网友
    在使用excel处理报表时候,往往要利用系统带的图表工具生成比例示意图,不仅直观,又显专业。当然,在web应用程序中,也可以使用office web components 功能,但是却很复杂。在.net框架下,通过简单的编程,就可以轻松地做出地道的比例示意图。在使用gdi+作图的时候,除了要熟练应用.net提供的类外,还要从整体上把握图形生成的坐标。在gdi+里,最左上角的坐标为(0,0),最右下角的做标值最大。

  本节我们将通过gid+绘制图形。便于实例模拟,我们采用数组数据来模拟公司业务数据。

  新建一个web窗体,命名为gdi_sample2.aspx,逻辑代码如下:

  '-----code begin-----

  imports system.drawing

  imports system.drawing.bitmap

  imports system.drawing.graphics

  imports system.drawing.imaging

  public class gdi_sample4

  inherits system.web.ui.page

  #region " web 窗体设计器生成的代码 "

  '此处省略窗体设计器生成的代码

  #end region

  '定义公共数组变量,用来存放模拟公司销售额数据

  public data(5, 1) as string

  private sub page_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load

  '在此处放置初始化页的用户代码

  dim i as int16

  dim objbitmap as bitmap

  objbitmap = new bitmap(400, 300)

  '声明graphics对象

  dim objgraphics as graphics

  '指定画布

  objgraphics = graphics.fromimage(objbitmap)

  '设置背景色为白色

  objgraphics.clear(color.white)

  '画出图形边框,注意留出划线的空间,为一个象素

  objgraphics.drawrectangle(pens.black, 1, 1, 398, 298)

  '生成表头文字

  objgraphics.drawstring("本公司上半年营业额统计图", new font("宋体", 16, fontstyle.bold), brushes.black, new pointf(60, 5))

  '获取模拟数据

  getdata()

  dim monthcolor as pointf = new pointf(260, 40)

  dim fontinfor as pointf = new pointf(285, 36)

  '画出示意颜色图例

  for i = 0 to 5

  '画出填充矩形。

  objgraphics.fillrectangle(new solidbrush(getcolor(i)), monthcolor.x, monthcolor.y, 20, 10)

  '画出矩形边框。

  objgraphics.drawrectangle(pens.black, monthcolor.x, monthcolor.y, 20, 10)

  '画出图例说明文字--data(i, 0)

  objgraphics.drawstring(data(i, 0), new font("宋体", 10), brushes.black, fontinfor)

  '移动坐标位置,只移动y方向的值即可。

  monthcolor.y += 15

  fontinfor.y += 15

  next i

  '遍历数据源的每一项数据,并根据数据的大小画出矩形图(即柱形图的柱)。

  for i = 0 to 5

  '画出填充矩形。

  objgraphics.fillrectangle(new solidbrush(getcolor(i)), (i * 25) + 35, 270 - cint(data(i, 1)), 15, cint(data(i, 1)))

  '画出矩形边框线。

  objgraphics.drawrectangle(pens.black, (i * 25) + 35, 270 - cint(data(i, 1)), 15, cint(data(i, 1)))

  next

  '画出示意坐标

  objgraphics.drawline(new pen(color.blue, 1), 10, 0, 10, 320)

  objgraphics.drawline(new pen(color.blue, 1), 10, 270, 200, 270)

  '在示意坐标上添加数值标志,注意坐标的计算

  for i = 0 to 5

  objgraphics.drawline(new pen(color.blue, 1), 10, i * 50 + 20, 20, i * 50 + 20)

  objgraphics.drawstring((250 - i * 50).tostring, new font("宋体", 10), brushes.black, 12, i * 50 + 8)

  next

  ' 统计总销售额

  dim scount as integer

  for i = 0 to 5

  scount += cint(data(i, 1))

  next

  '定义画出扇形角度变量

  dim scg as single = 0

  dim stg as single = 0

  for i = 0 to 5

  '计算当前角度值:当月销售额 / 总销售额 * 360,得到饼图中当月所占的角度大小。

  scg = cint(data(i, 1)) / scount * 360

  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表