| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7640 人关注过本帖
标题:C#.net SQL 数据 动态生成曲线图
只看楼主 加入收藏
lee_boy
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-7-9
收藏
 问题点数:0 回复次数:13 
C#.net SQL 数据 动态生成曲线图

谁有asp.net用C#代码生成图形的,不要告诉我去搜索,我可以在网上找了好久没有找到,才发这个贴子的..

搜索更多相关主题的帖子: SQL 曲线图 动态 数据 图形 
2006-12-28 16:37
lee_boy
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-7-9
收藏
得分:0 
好象这个难度很高,怎么没有人知道呢?
2006-12-28 16:48
wyg4859
Rank: 2
等 级:新手上路
威 望:4
帖 子:883
专家分:0
注 册:2006-8-2
收藏
得分:0 

http://www.找到组织!找到党!
2006-12-28 17:18
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
说实话,我都不知道你是要ASP.ET的代码还是C#的代码...

飘过~~
2006-12-28 21:06
wkm2000
Rank: 1
等 级:新手上路
帖 子:119
专家分:0
注 册:2006-3-6
收藏
得分:0 

这个是我练着玩的,可以用。你看看吧!
数据库中GDI表。yf-月份,xl-销量
private void Page_Load(object sender, System.EventArgs e) //自己的代码(绘制柱状图)
{
// 在此处放置用户代码以初始化页面
SqlConnection conn=new SqlConnection("server=localhost; database=WKM001; uid=sa; pwd="); //创建数据库连接以获得数据
conn.Open();
SqlCommand com=new SqlCommand("select yf, xl from GDI order by yf" , conn);
SqlDataReader dr=com.ExecuteReader();
int [] szxls=new int[12]; //定义数组存放从数据库获得的销量数据
string [] szyf=new string[12]; //定义数组存放从数据库获得的月份
int iindex=0;
while(dr.Read())
{
szxls[iindex]=dr.GetInt32(1);
szyf[iindex]=dr.GetInt32(0).ToString()+"月";
iindex ++; //读取GDI中的数据并存入数组
}
dr.Close();
com.Dispose();
conn.Close(); //关闭数据连接

Bitmap bm=new Bitmap(600,250); //创建一个长度为600,宽带为250的Bitmap实例
Graphics g ;
g=Graphics.FromImage(bm); //由此Bitmap实例创建Graphic实例
g.Clear(Color.Snow); //用Snow色彩为背景色填充此绘画图面
g.DrawString("××公司××××年度销售情况统计表",new Font("黑体",16), Brushes.Black, new Point(5,5)); //在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题
//以下代码是是实现图右上部
Point myRec=new Point(535, 30);
Point myDec=new Point(560, 26); //以上是在图01中为下面绘制定位
g.DrawString("单位:万套", new Font("宋体", 9), Brushes.Black, new Point(525, 12));
for ( int i = 0 ; i < szyf.Length ; i++ )
{
g.DrawRectangle(Pens.Black, myRec.X, myRec.Y, 20, 10); //绘制小方块
g.FillRectangle(new SolidBrush(GetColor(i)), myRec.X, myRec.Y, 20 , 10 ); //填充小方块
g.DrawString(szyf[i].ToString(), new Font("宋体", 9), Brushes.Black, myDec); //绘制小方块右边的文字
myRec . Y += 15 ;
myDec . Y += 15 ;
}
//以下代码是绘制Bar图,及其销售数量
int iBarWidth = 40 ;
int scale = 10 ;
for ( int i = 0 ; i < szxls . Length ; i++ )
{
g.DrawRectangle(Pens.Black, (i*iBarWidth)+15, 250-(szxls[i]*scale), 20, (szxls[i]*scale)+5); //绘制Bar图
g.FillRectangle(new SolidBrush(GetColor(i)), (i*iBarWidth)+15, 250-(szxls[i]*scale), 20, (szxls[i]*scale)+5); //以指定的色彩填充Bar图
g.DrawString(szxls[i].ToString(), new Font("宋体", 9), Brushes.Black, (i*iBarWidth)+20, 235-(szxls[i]*scale)); //显示Bar图代表的数据
}
//以下代码是绘制曲线图
Point[] points = new Point[szyf.Length]; //定义曲线转折点
for (int i = 0; i < szyf.Length; i++)
{
int iWidth=30;
int scale = 10 ;
points[i].X= i*iWidth;
points[i].Y = 250-(szxls[i]*scale);
}
Pen pen=new Pen(Color.Black, 2);
g.DrawCurve(pen, points, 0.8f);
//以下代码是绘制边框,并形成Jpeg文件,供浏览器显示出来
Pen p = new Pen ( Color.Black , 2 ) ;
g . DrawRectangle ( p , 1 , 1 , 598 , 248 ) ;
bm.Save ( Response . OutputStream , ImageFormat.Gif) ;
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
/// <summary>
/// 获取颜色
/// </summary>
/// <param name="itemIndex">数组的索引</param>
/// <returns></returns>
private Color GetColor ( int itemIndex )
{
  Color MyColor ;
  int i = itemIndex ;
switch (i)
{
  case 0 :
   MyColor = Color.Green;
   return MyColor;
  case 1 :
   MyColor = Color.Red;
   return MyColor;
  case 2:
   MyColor = Color.Yellow;
   return MyColor;
  case 3 :
   MyColor = Color.Blue;
   return MyColor;
  case 4 :
   MyColor = Color.Orange;
   return MyColor;
   case 5 :
   MyColor = Color.Aqua;
   return MyColor;
  case 6:
   MyColor = Color.SkyBlue;
   return MyColor;
   case 7:
   MyColor = Color.DeepPink;
   return MyColor;
  case 8:
   MyColor = Color.Azure;
   return MyColor;
  case 9:
   MyColor = Color.Brown;
   return MyColor;
  case 10:
   MyColor = Color.Pink;
   return MyColor;
  case 11:
   MyColor = Color.BurlyWood;
   return MyColor;
  case 12:
   MyColor = Color.Chartreuse;
   return MyColor;
  default:
   MyColor = Color.Pink;
   return MyColor;
}
}


MSN:wkm821215@ OICQ:49297869 ^_^
2006-12-29 10:22
梦幻情缘
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:769
专家分:20
注 册:2005-4-4
收藏
得分:0 
不知道你想要什么样的图形的,这方面太多了.
2006-12-29 22:16
ruanjian2110
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游民
威 望:7
帖 子:486
专家分:50
注 册:2008-5-25
收藏
得分:0 
我数据库里面只有一个接收时间:2008-5-31 6:12:23,要按照这个时间做按小时统计,按天统计和按月统计的折线图该怎么做?有做过统计图形方面的兄弟们给个方案或是源代码借鉴一下,本人不胜感激!!!!
2008-06-11 17:22
小乌龟
Rank: 2
等 级:新手上路
威 望:4
帖 子:1291
专家分:0
注 册:2007-9-28
收藏
得分:0 
这里是从Dataset里的数据生成曲线图.
我的Dataset是从表Sendrec里读取的数据,分别有Id,Sendid(订单号),Sendtime(记录时间),Sendnum(单位时间发送量/我这里是五分钟)几个字段

过程如下:
public void draw(Page page,DataSet ds,int Tnum){}
其中page是用来传递引用这个过程的页面,这样让页面是JPG方式直接向客户端输出生成的曲线图.
ds就是取出来的数据集了
Tnum只是我这里要用到的一个参数,不想让这个类去接触读取过程,所以把订单的总量直接取出后传递给它的.
2008-06-11 17:58
小乌龟
Rank: 2
等 级:新手上路
威 望:4
帖 子:1291
专家分:0
注 册:2007-9-28
收藏
得分:0 
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing;
using


public class imgdraw
{
    public imgdraw()
    {
        
    }
    public void draw(Page page,DataSet ds,int Tnum)
    {
        //取得记录数量
        int count = ds.Tables[0].Rows.Count;
        //记算图表宽度
        int wd = 80 + 20 * (count - 1);
        //设置最小宽度为800
        if (wd < 800) wd = 800;
        //生成Bitmap对像
        Bitmap img=new Bitmap(wd,400);
        //生成绘图对像
        Graphics g = Graphics.FromImage(img);
        //定义黑色画笔
        Pen Bp = new Pen(Color.Black);
        //定义红色画笔
        Pen Rp = new Pen(Color.Red);
        //定义银灰色画笔
        Pen Sp = new Pen(Color.Silver);
        //定义大标题字体
        Font Bfont = new Font("Arial", 12, FontStyle.Bold);
        //定义一般字体
        Font font = new Font("Arial", 6);
        //定义大点的字体
        Font Tfont = new Font("Arial", 9);
        //绘制底色
        g.DrawRectangle(new Pen(Color.White, 400), 0, 0, img.Width, img.Height);
        //定义黑色过渡型笔刷
        LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Black, Color.Black, 1.2F, true);
        //定义蓝色过渡型笔刷
        LinearGradientBrush Bluebrush = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Blue, Color.Blue, 1.2F, true);
        //绘制大标题
        g.DrawString(ds.Tables[0].Rows[0]["sendid"].ToString() + "号订单发送情况曲线图", Bfont, brush, 40, 5);
        //取得当前发送量
        int nums=0;
        for (int i = 0; i < count; i++)
        {
            nums+=Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]);
        }
        //绘制信息简报
        string info="订单发送时间:"+ds.Tables[0].Rows[0]["sendtime"].ToString()+"  曲线图生成时间:"+DateTime.Now.ToString()+"  订单总量:"+Tnum.ToString()+"  当前发送总量:"+nums.ToString();
        g.DrawString(info, Tfont, Bluebrush, 40, 25);
        //绘制图片边框
        g.DrawRectangle(Bp, 0, 0, img.Width - 1, img.Height - 1);

        //绘制竖坐标线      
        for (int i = 0; i < count; i++)
        {
            g.DrawLine(Sp, 40+20 * i, 60, 40+20 * i, 360);
        }
        //绘制时间轴坐标标签
        for (int i = 0; i < count; i+=2)
        {
            string st = Convert.ToDateTime(ds.Tables[0].Rows[i]["sendtime"]).ToString("hh:mm");
            g.DrawString(st, font, brush, 30 + 20 * i, 370);
        }
        //绘制横坐标线
        for (int i = 0; i < 10; i++)
        {
            g.DrawLine(Sp, 40, 60+30*i, 40+20*(count-1), 60+30*i);
            int s = 2500 - 50 * i * 5;
            //绘制发送量轴坐标标签
            g.DrawString(s.ToString(), font, brush, 10, 60 + 30 * i);
        }
        
        //绘制竖坐标轴
        g.DrawLine(Bp, 40, 55, 40, 360);
        //绘制横坐标轴
        g.DrawLine(Bp, 40, 360, 45 + 20 * (count - 1), 360);

        //定义曲线转折点
        Point[] p = new Point[count];
        for (int i = 0; i < count; i++)
        {
            p[i].X = 40 + 20 * i;
            p[i].Y = 360- Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]) / 5*3/5;
        }
        //绘制发送曲线
        g.DrawLines(Rp, p);

        for (int i = 0; i < count; i++)
        {
            //绘制发送记录点的发送量
            g.DrawString(ds.Tables[0].Rows[i]["sendnum"].ToString(), font, Bluebrush, p[i].X, p[i].Y - 10);
            //绘制发送记录点
            g.DrawRectangle(Rp, p[i].X - 1, p[i].Y - 1, 2, 2);
        }
        //绘制竖坐标标题
        g.DrawString("发送量", Tfont, brush, 5, 40);
        //绘制横坐标标题
        g.DrawString("发送时间", Tfont, brush, 40, 385);


        //保存绘制的图片
        MemoryStream stream = new MemoryStream();
        img.Save(stream, ImageFormat.Jpeg);
        //图片输出
        page.Response.Clear();
        page.Response.ContentType = "image/jpeg";
        page.Response.BinaryWrite(stream.ToArray());

    }
}
2008-06-11 17:58
ruanjian2110
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游民
威 望:7
帖 子:486
专家分:50
注 册:2008-5-25
收藏
得分:0 
怎么没看见你读取数据库的代码,我现在正做这方面的曲线图,上面的不是整体的代码吧,从Dataset里的数据生成曲线图我怎么没看见,你有没有源代码给我借鉴一下,非常感谢。我的邮箱是ruanjian2110@

[[it] 本帖最后由 ruanjian2110 于 2008-6-11 20:09 编辑 [/it]]
2008-06-11 20:03
快速回复:C#.net SQL 数据 动态生成曲线图
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020297 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved