ASP.NET学习基础三十九:利用Graphics画图表

//引用using System.Drawing.Imaging;using System.Data.OleDb;

const String strconn = "Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=dianxinkapin;Data Source=new";

OleDbConnection conn=new OleDbConnection(strconn);

conn.Open();

string sql="select 卡类,sum(数量) as 总数量 from comeout group by 卡类";

OleDbCommand cmd=new OleDbCommand(sql,conn);

DataSet ds=new DataSet();

OleDbDataAdapter adapter1=new OleDbDataAdapter(cmd);

adapter1.Fill(ds);

conn.Close();

int iloop;

float total=0.0f,tmp;

for(iloop=0;iloop<ds.Tables[0].Rows.Count;iloop++)

{

tmp=Convert.ToSingle(ds.Tables[0].Rows[iloop]["总数量"]);//转换成单精度,投票不可能投半票。也可写成Convert.ToInt32

total+=tmp;

}

Font fontlegend=new Font("verdana",9),fonttitle=new Font("verdana",10,FontStyle.Bold);//设置字体

//fonttitle为主标题的字体

int width=230;//白色背景宽

const int bufferspace=15;

int legendheight=fontlegend.Height*(ds.Tables[0].Rows.Count+1)+bufferspace;

int titleheight = fonttitle.Height + bufferspace;

int height = width + legendheight + titleheight + bufferspace;//白色背景高

int pieheight = width;

Rectangle pierect=new Rectangle(0,titleheight,width,pieheight);

//加上各种随机色

ArrayList colors = new ArrayList();

Random rnd = new Random();

for (iloop = 0; iloop < ds.Tables[0].Rows.Count; iloop++)

colors.Add(new SolidBrush(Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255))));

Bitmap objbitmap=new Bitmap(width,height);//创建一个bitmap实例

//Bitmap objbitmap=new Bitmap(230,500);//创建一个bitmap实例

Graphics objgraphics=Graphics.FromImage(objbitmap); 

objgraphics.FillRectangle(new SolidBrush(Color.LightBlue), 0, 0, width, height);//画一个白色背景

objgraphics.FillRectangle(new SolidBrush(Color.LightYellow), pierect);//画一个亮黄色背景

//以下为画饼图(有几行row画几个)

float currentdegree=0.0f;

for (iloop = 0; iloop < ds.Tables[0].Rows.Count; iloop++)

{

objgraphics.FillPie((SolidBrush) colors[iloop], pierect, currentdegree,

Convert.ToSingle(ds.Tables[0].Rows[iloop]["总数量"]) / total * 360);

currentdegree += Convert.ToSingle(ds.Tables[0].Rows[iloop]["总数量"]) / total * 360;

}

//---以下为生成主标题

SolidBrush blackbrush=new SolidBrush(Color.Black);

string title="各类卡品出库的比例";

StringFormat stringFormat = new StringFormat();

stringFormat.Alignment = StringAlignment.Center;

stringFormat.LineAlignment = StringAlignment.Center;

objgraphics.DrawString(title, fonttitle, blackbrush, new Rectangle(0, 0, width, titleheight), stringFormat);

//列出各字段与得票数

objgraphics.DrawRectangle(new Pen(Color.Black, 2), 0, height - legendheight, width, legendheight);

for (iloop = 0; iloop < ds.Tables[0].Rows.Count; iloop++)

{

objgraphics.FillRectangle((SolidBrush) colors[iloop], 5, height - legendheight + fontlegend.Height * iloop + 5, 10, 10);

objgraphics.DrawString(((String) ds.Tables[0].Rows[iloop][“卡类”]) + “ - ” +

Convert.ToString(ds.Tables[0].Rows[iloop]["总数量"]), fontlegend, blackbrush,20, height - legendheight + fontlegend.Height * iloop + 1);

}

//

objgraphics.DrawString("各类卡品的总数是:"+Convert.ToString(total),fontlegend,blackbrush, 5, height - fontlegend.Height );

//图像总的高度-一行字体的高度,即是最底行的一行字体高度(height - fontlegend.Height )

Response.ContentType="image/jpeg";

objbitmap.Save(Response.OutputStream,ImageFormat.Jpeg);

objbitmap.Save(Server.MapPath("images\\")+"my.jpg", ImageFormat.Jpeg);//输出到文件

objgraphics.Dispose();

objbitmap.Dispose();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值