我想将数据库中的数据用Bar的图形表示出来,, 以前我是用Excel做的,先将数据库中的值取到excel中,然后用VBA将图形画出来, 不过这样好想太麻烦了,   请问有没有别的方法用C# 画 Bar 图?????????? 谢谢啦。

解决方案 »

  1.   

    有的,你创建一个母图片(或新建一个图片对象)的graphic接口就好了,可以在一张白图上画矩形条就可以了。矩形的高度就是数据。ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_fxmclignrl/html/a98a76ab-e455-49c9-891c-0491ac932f2c.htm
      

  2.   

    方法类似
    http://dotnet.aspx.cc/article/221bc601-1a1b-4e1f-883d-04b043659703/read.aspx
      

  3.   

    參見
    http://blog.csdn.net/tjvictor/archive/2006/11/25/1414011.aspx
    中柱形圖。
      

  4.   

    //**************在form上绘制******************
                //Graphics g = this.CreateGraphics();
                //********************************************
                //*************在背景图上绘制*****************
                //pic = new PictureBox();
                //pic.Size = new Size(this.ClientSize.Width, ClientSize.Height);
                //pic.Location = new Point(0, 0);
                //pic.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;            map = new Bitmap(@"./Sunset.jpg");            // map = new Bitmap(this.ClientSize.Width, ClientSize.Height);            g = Graphics.FromImage(map);
                // g.Clear(Color.Black);
                this.BackgroundImage = map;
                //pic.BackgroundImage = map;
                //pic.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
                //this.Controls.Add(pic);
                //********************************************
                DataTable dtl = new DataTable();
                string ElementName = "";
                DaoCa daocha = new DaoCa(g);
                Pen myPen = new Pen(Color.FromArgb(100,100,100), 6);
                Font drawFont = new Font("Arial", 8);
                DataTable dt = new DataTable();                         //定义datatable
                int xx1 = 0, xx2 = 0, yy1 = 0, yy2 = 0, xx = 0, dd,ll=0;
                dt = db.createDataTable("select * from ElementList ");//通过DB类进行数据库的查询返回datatable
                int asd = dt.Rows.Count;
                for (int i = 0; i < asd; i++)
                {
                    xx1 = System.Convert.ToInt16(dt.Rows[i][4].ToString());
                    yy1 = System.Convert.ToInt16(dt.Rows[i][5].ToString());
                    xx2 = System.Convert.ToInt16(dt.Rows[i][6].ToString());
                    yy2 = System.Convert.ToInt16(dt.Rows[i][7].ToString());
                    xx = System.Convert.ToInt16(dt.Rows[i][8]);
                    dd = System.Convert.ToInt16(dt.Rows[i][1]);
                    ll=System.Convert.ToInt16(dt.Rows[i]["eloprtype"]);
                    //ElementName = dt.Rows[i]["eleactid"].ToString();//获取元素名字bjg
                    //string sqlstr = "select a.*,b.Btype from dbo.ElementList a ";
                    //       sqlstr += "inner join humpstation.dbo.RailBranch b ";
                    //       sqlstr += "on b.BRelate=a.eleactid where b.BElementID='" + ElementName + "'";
                    if (xx2 == 0 && yy2 == 0 && dd == 5)
                    {
                        g.DrawString(dt.Rows[i][2].ToString(), drawFont, Brushes.Green, xx1, yy1);//在背景图上填写字符串                }
                    if (xx2 == 0 && yy2 == 0 && xx == 372)
                    {
                        g.FillEllipse(Brushes.Green, xx1, yy1, 12, 12);//画信号机                }                if (xx2 == 0 && yy2 == 0 && xx == 20)
                    {
                       // g.FillEllipse(Brushes.Red, xx1, yy1, 12, 12);//画道岔
                    }
                    else
                    {  
                        if(ll==61 || ll== 62||ll==63)
                        { 
                            //g.DrawLine(Pens.Green, xx2, yy2, xx1, yy1); 
                            g.DrawRectangle(Pens.Green, xx1, yy1-3, (xx2 - xx1)/2, 6);
                            g.DrawRectangle(Pens.Green, (xx2+xx1)/2, yy1-3, (xx2 - xx1) / 2, 6);
                        }
                        else
                        if (xx1 != 0 && yy2 != 0)
                            g.DrawLine(myPen, xx2, yy2, xx1, yy1);//画直线
                                      }            }
                dt = db.createDataTable("select * from ElementList ");
               // sqlconn
                for (int i = 0; i < asd; i++)
                {
                    xx1 = System.Convert.ToInt16(dt.Rows[i]["elstartx"].ToString());
                    yy1 = System.Convert.ToInt16(dt.Rows[i]["elstarty"].ToString());
                    xx2 = System.Convert.ToInt16(dt.Rows[i]["elendx"].ToString());
                    yy2 = System.Convert.ToInt16(dt.Rows[i]["elendy"].ToString());
                   // xx = System.Convert.ToInt16(dt.Rows[i][8]);
                   // dd = System.Convert.ToInt16(dt.Rows[i][1]);
                    ll = System.Convert.ToInt16(dt.Rows[i]["eloprtype"]);
                    ElementName = dt.Rows[i]["eleactid"].ToString();//获取元素名字bjg
                    if(ll==200)
                    {
                        string  sqlstr = "select a.*,b.Btype from dbo.ElementList a ";
                       bool stype = false;
                                sqlstr += "inner join humpstation.dbo.RailBranch b ";
                                sqlstr += "on b.BRelate=a.eleactid where b.BElementID='" + ElementName + "'";
                            sda =new SqlDataAdapter(sqlstr,sqlconn);
                            sda.Fill(dtl);
                              if (dtl.Rows.Count > 0)
                              { 
                                  for (int j = 0; j < dtl.Rows.Count; j++)
                                  {
                                      xx2 = System.Convert.ToInt16(dtl.Rows[j]["elstartx"].ToString());
                                      yy2 = System.Convert.ToInt16(dtl.Rows[j]["elstarty"].ToString());
                                      stype = (bool)dtl.Rows[j]["Btype"];
                                         if(yy1!=yy2)
                                          daocha.MoveTo(new PointF(xx1 + 6, yy1 + 6), new PointF(xx2 + 6, yy2 + 6), !stype, true, Brushes.Red);
                                      
                           
                                  }                          }                 }
                    dtl.Clear();
                    
                        }
      

  5.   

    我想画一个这样的柱形图!! 比如说, 我有数据:      cat   0.5    0.7  1.2   1.6
          dog   0.7    1.3  1.9   2.1
          house 1.3    0.6  0.9   0.8     以上的数据有四行,,在画柱形图的时候,,我想第一行用一种颜色,第二行用另一种颜色,柱的长度由相应的大小来决定,又谁有相关的程序吗?