用C#绘制统计图

一. 柱状图的绘制.

绘制步骤如下:

1. 定义绘图用到的类.

定义绘图类
int height=500, width=700;
Bitmap image
=new
Bitmap(width, height);
Graphics g
=
Graphics.FromImage(image);
Pen mypen
=new Pen(brush,1
);

 

2. 绘制图框.

绘制图框
g.FillRectangle(Brushes.WhiteSmoke,0, 0, width, height);

 

3. 绘制横向坐标线

绘制横向坐标线
for (int i=0; i<14; i++)
{
g.DrawLine(mypen, x,
80, x,340
);
x
= x +40
;
}

 

4. 绘制纵向坐标线

绘制纵向坐标线
for (int i=0; i<9; i++)
{
g.DrawLine(mypen,
60, y,620
, y);
y
= y +26
;
}

 

5. 绘制横坐标值

绘制横坐标值
String[] n = {"第一期","第二期","第三期","第四期","全年" };
for (int i=0; i<7; i++
)
{
g.DrawString(n[i].ToString(), font, Brushes.Blue, x,
348
);
x
= x +78
;
}

 

6. 绘制纵坐标值

绘制纵坐标
String[] m = {"250","225","200","175","150","125","100“};
for (int i=0; i<10; i++)
{
g.DrawString(m[i].ToString(), font, Brushes.Blue,
25
, y);
y
= y +26
;
}

 

7. 定义数组存储数据库中统计的数据

定义存储统计数据的数组
int[] Count1=newint[7];//存储从数据库读取的报名人数
int[] Count2=newint[7];//存储从数据库读取的通过人数

 

8. 从数据库中读取报名人数与通过人数

读取数据
SqlConnection Con =new SqlConnection(
"Server=(Local);Database=committeeTraining;"
);
Con.Open();
string cmdtxt2="SELECT * FROM ##Count

where Company='" + ****+ "'";
SqlDataAdapter da=new SqlDataAdapter(cmdtxt2, Con);
DataSet ds
=new
DataSet();
da.Fill(ds);

 

9. 将读取的数据存储到数组中

将数据存储到数组中
Count1[0]= Convert.ToInt32(ds.Tables[0].Rows[0][“count1”].ToString());
Count1[
1] = Convert.ToInt32(ds.Tables[0].Rows[0
][“count3”].ToString());
Count2[
0] = Convert.ToInt32(ds.Tables[0].Rows[0
][“count2”].ToString());
Count2[
1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count4"
].ToString());

 

10.定义画笔和画刷准备绘图

准备绘制柱状图
x =80;
Font font2
=new
System.Drawing.Font(
"Arial",10
, FontStyle.Bold);
SolidBrush mybrush
=new
SolidBrush(Color.Red);
SolidBrush mybrush2
=new
SolidBrush(Color.Green);

 

11. 根据数组中的值绘制柱状图

 

绘制柱状图

(
1)第一期报名人数
g.FillRectangle(mybrush, x,
340- Count1[0],20, Count1[0
]);
g.DrawString(Count1[
0
].ToString(), font2,
Brushes.Red, x,
340- Count1[0]-15
);

(
2
) 第一期通过人数
x
= x +20
;
g.FillRectangle(mybrush2, x,
340- Count2[0],20, Count2[0
]);
g.DrawString(Count2[
0
].ToString(), font2,
Brushes.Green, x,
340- Count2[0]-15
);

 

12. 将图形输出到页面.

将页面输出到页中
System.IO.MemoryStream ms=new
System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType
="image/Jpeg"
;
Response.BinaryWrite(ms.ToArray());

 

最终柱状图的效果图:

 

 

 

 

柱状图的完整代码:

绘制柱状统计图的完整代码
privatevoid CreateImage()
{
int height =500, width=700
;
Bitmap image
=new
Bitmap(width, height);
//创建Graphics类对象

Graphics g = Graphics.FromImage(image);

try

{
//清空图片背景色
g.Clear(Color.White);

Font font
=new Font("Arial",10
, FontStyle.Regular);
Font font1
=new Font("宋体",20
, FontStyle.Bold);

LinearGradientBrush brush
=new LinearGradientBrush(new Rectangle(0,0
, image.Width, image.Height),
Color.Blue, Color.BlueViolet,
1.2f,true
);
g.FillRectangle(Brushes.WhiteSmoke,
0,0
, width, height);
// Brush brush1 = new SolidBrush(Color.Blue);


g.DrawString(
this.ddlTaget.SelectedItem.Text+""+this.ddlYear.SelectedItem.Text+
" 成绩统计柱状图", font1, brush,new PointF(70,30
));
//画图片的边框线

g.DrawRectangle(new Pen(Color.Blue),0, 0, image.Width-1, image.Height-1);


Pen mypen
=new Pen(brush,1
);
//
绘制线条
//绘制横向线条

int x=100;
for (int i=0; i<14; i++
)
{
g.DrawLine(mypen, x,
80, x,340
);
x
= x +40
;
}
Pen mypen1
=new Pen(Color.Blue,2
);
x
=60
;
g.DrawLine(mypen1, x,
80, x,340
);

//绘制纵向线条

int y=106;
for (int i=0; i<9; i++
)
{
g.DrawLine(mypen,
60, y,620
, y);
y
= y +26
;
}
g.DrawLine(mypen1,
60, y,620
, y);

//x轴

String[] n = { "第一期","第二期","第三期","第四期","上半年","下半年","全年统计" };
x
=78
;
for (int i=0; i<7; i++
)
{
g.DrawString(n[i].ToString(), font, Brushes.Blue, x,
348);//设置文字内容及输出位置

x = x+78;
}

//y轴

String[] m = {"250","225","200","175","150","125","100"," 75",
" 50"," 25"," 0"
};
y
=72
;
for (int i=0; i<10; i++
)
{
g.DrawString(m[i].ToString(), font, Brushes.Blue,
25, y);//设置文字内容及输出位置

y = y+26;
}

int[] Count1=newint[7
];
int[] Count2=newint[7
];

SqlConnection Con
=new SqlConnection("Server=(Local);Database=committeeTraining;Uid=sa;Pwd=**"
);
Con.Open();
string cmdtxt2="SELECT * FROM ##Count where Company='"+this.ddlTaget.SelectedItem.Text.Trim()+"'"
;
SqlDataAdapter da
=new
SqlDataAdapter(cmdtxt2, Con);
DataSet ds
=new
DataSet();
da.Fill(ds);

Count1[
0] = Convert.ToInt32(ds.Tables[0].Rows[0]["count1"
].ToString());
Count1[
1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count3"
].ToString());
Count1[
2] = Convert.ToInt32(ds.Tables[0].Rows[0]["count5"
].ToString());
Count1[
3] = Convert.ToInt32(ds.Tables[0].Rows[0]["count7"
].ToString());

Count1[
4] = Count1[0]+ Count1[1
];
Count1[
5] = Count1[2]+ Count1[3
];

Count1[
6] = Convert.ToInt32(ds.Tables[0].Rows[0]["count9"
].ToString());


Count2[
0] = Convert.ToInt32(ds.Tables[0].Rows[0]["count2"
].ToString());
Count2[
1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count4"
].ToString());
Count2[
2] = Convert.ToInt32(ds.Tables[0].Rows[0]["count6"
].ToString());
Count2[
3] = Convert.ToInt32(ds.Tables[0].Rows[0]["count8"
].ToString());

Count2[
4] = Count2[0]+ Count2[1
];
Count2[
5] = Count2[2]+ Count2[3
];

Count2[
6] = Convert.ToInt32(ds.Tables[0].Rows[0]["count10"
].ToString());

//绘制柱状图.

x =80;
Font font2
=new System.Drawing.Font("Arial",10
, FontStyle.Bold);
SolidBrush mybrush
=new
SolidBrush(Color.Red);
SolidBrush mybrush2
=new
SolidBrush(Color.Green);

//第一期

g.FillRectangle(mybrush, x,340- Count1[0],20, Count1[0]);
g.DrawString(Count1[
0].ToString(), font2, Brushes.Red, x,340- Count1[0]-15
);

x
= x +20
;
g.FillRectangle(mybrush2, x,
340- Count2[0],20, Count2[0
]);
g.DrawString(Count2[
0].ToString(), font2, Brushes.Green, x,340- Count2[0]-15
);


//第二期

x = x+60;
g.FillRectangle(mybrush, x,
340- Count1[1],20, Count1[1
]);
g.DrawString(Count1[
1].ToString(), font2, Brushes.Red, x,340- Count1[1]-15
);


x
= x +20
;
g.FillRectangle(mybrush2, x,
340- Count2[1],20, Count2[1
]);
g.DrawString(Count2[
1].ToString(), font2, Brushes.Green, x,340- Count2[1]-15
);


//第三期

x = x+60;
g.FillRectangle(mybrush, x,
340- Count1[2],20, Count1[2
]);
g.DrawString(Count1[
2].ToString(), font2, Brushes.Red, x,340- Count1[2]-15
);

x
= x +20
;
g.FillRectangle(mybrush2, x,
340- Count2[2],20, Count2[2
]);
g.DrawString(Count2[
2].ToString(), font2, Brushes.Green, x,340- Count2[2]-15
);

//第四期

x = x+60;
g.FillRectangle(mybrush, x,
340- Count1[3],20, Count1[3
]);
g.DrawString(Count1[
3].ToString(), font2, Brushes.Red, x,340- Count1[3]-15
);

x
= x +20
;
g.FillRectangle(mybrush2, x,
340- Count2[3],20, Count2[3
]);
g.DrawString(Count2[
3].ToString(), font2, Brushes.Green, x,340- Count2[3]-15
);

//上半年

x = x+60;
g.FillRectangle(mybrush, x,
340- Count1[4],20, Count1[4
]);
g.DrawString(Count1[
4].ToString(), font2, Brushes.Red, x,340- Count1[4]-15
);

x
= x +20
;
g.FillRectangle(mybrush2, x,
340- Count2[4],20, Count2[4
]);
g.DrawString(Count2[
4].ToString(), font2, Brushes.Green, x,340- Count2[4]-15
);

//下半年

x = x+60;
g.FillRectangle(mybrush, x,
340- Count1[5],20, Count1[5
]);
g.DrawString(Count1[
5].ToString(), font2, Brushes.Red, x,340- Count1[5]-15
);

x
= x +20
;
g.FillRectangle(mybrush2, x,
340- Count2[5],20, Count2[5
]);
g.DrawString(Count2[
5].ToString(), font2, Brushes.Green, x,340- Count2[5]-15
);

//全年

x = x+60;
g.FillRectangle(mybrush, x,
340- Count1[6],20, Count1[6
]);
g.DrawString(Count1[
6].ToString(), font2, Brushes.Red, x,340- Count1[6]-15
);


x
= x +20
;
g.FillRectangle(mybrush2, x,
340- Count2[6],20, Count2[6
]);
g.DrawString(Count2[
6].ToString(), font2, Brushes.Green, x,340- Count2[6]-15
);


//绘制标识

Font font3 =new System.Drawing.Font("Arial",10, FontStyle.Regular);
g.DrawRectangle(
new Pen(Brushes.Blue),170, 400, 250,50); //绘制范围框

g.FillRectangle(Brushes.Red,270, 410, 20,10); //绘制小矩形
g.DrawString("报名人数", font3, Brushes.Red,292, 408);

g.FillRectangle(Brushes.Green,
270,430, 20, 10
);
g.DrawString(
"通过人数", font3, Brushes.Green,292, 428
);

System.IO.MemoryStream ms
=new
System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType
="image/Jpeg"
;
Response.BinaryWrite(ms.ToArray());
}
finally

{
g.Dispose();
image.Dispose();
}
}

二. 折线统计图的绘制

效果:

 

 

 

折线图的完整代码:

折线图的完整代码
privatevoid CreateImage()
{
int height =480, width=700
;
Bitmap image
=new
Bitmap(width, height);
Graphics g
=
Graphics.FromImage(image);

try

{
//清空图片背景色
g.Clear(Color.White);

Font font
=new System.Drawing.Font("Arial",9
, FontStyle.Regular);
Font font1
=new System.Drawing.Font("宋体",20
, FontStyle.Regular);
Font font2
=new System.Drawing.Font("Arial",8
, FontStyle.Regular);
LinearGradientBrush brush
=new
LinearGradientBrush(
new Rectangle(0,0, image.Width, image.Height), Color.Blue, Color.Blue,1.2f, true
);
g.FillRectangle(Brushes.AliceBlue,
0,0
, width, height);
Brush brush1
=new
SolidBrush(Color.Blue);
Brush brush2
=new
SolidBrush(Color.SaddleBrown);

g.DrawString(
this.ddlTaget.SelectedItem.Text+""+this.ddlYear.SelectedItem.Text+

" 成绩统计折线图", font1, brush1,new PointF(85,30
));
//画图片的边框线

g.DrawRectangle(new Pen(Color.Blue),0, 0, image.Width-1, image.Height-1);

Pen mypen
=new Pen(brush,1
);
Pen mypen2
=new Pen(Color.Red,2
);
//
绘制线条
//绘制纵向线条

int x=60;
for (int i=0; i<8; i++
)
{
g.DrawLine(mypen, x,
80, x,340
);
x
= x +80
;
}
Pen mypen1
=new Pen(Color.Blue,3
);
x
=60
;
g.DrawLine(mypen1, x,
82, x,340
);

//绘制横向线条

int y=106;
for (int i=0; i<10; i++
)
{
g.DrawLine(mypen,
60, y,620
, y);
y
= y +26
;
}
// y = 106;

g.DrawLine(mypen1,60, y -26,620, y -26);

//x轴

String[] n = { "第一期","第二期","第三期","第四期","上半年","下半年","全年统计" };
x
=45
;
for (int i=0; i<7; i++
)
{
g.DrawString(n[i].ToString(), font, Brushes.Red, x,
348);//设置文字内容及输出位置

x = x+77;
}

//y轴

String[] m = { "220人"," 200人"," 175人","150人"," 125人"," 100人"," 75人"," 50人",
" 25人"
};
y
=100
;
for (int i=0; i<9; i++
)
{
g.DrawString(m[i].ToString(), font, Brushes.Red,
10, y);//设置文字内容及输出位置

y = y+26;
}

int[] Count1=newint[7
];
int[] Count2=newint[7
];

SqlConnection Con
=new SqlConnection("Server=(Local);Database=committeeTraining;Uid=sa;Pwd=eesoft"
);
Con.Open();
string cmdtxt2="SELECT * FROM ##Count where Company='"+this.ddlTaget.SelectedItem.Text.Trim()+"'"
;
SqlDataAdapter da
=new
SqlDataAdapter(cmdtxt2, Con);
DataSet ds
=new
DataSet();
da.Fill(ds);

//报名人数

Count1[0]= Convert.ToInt32(ds.Tables[0].Rows[0]["count1"].ToString());
Count1[
1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count3"
].ToString());
Count1[
2] = Convert.ToInt32(ds.Tables[0].Rows[0]["count5"
].ToString());
Count1[
3] = Convert.ToInt32(ds.Tables[0].Rows[0]["count7"
].ToString());

Count1[
6] = Convert.ToInt32(ds.Tables[0].Rows[0]["count9"].ToString());//全年


Count1[
4]= Count1[0]+ Count1[1];
Count1[
5] = Count1[2]+ Count1[3
];


Count2[
0] = Convert.ToInt32(ds.Tables[0].Rows[0]["count2"
].ToString());
Count2[
1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count4"
].ToString());
Count2[
2] = Convert.ToInt32(ds.Tables[0].Rows[0]["count6"
].ToString());
Count2[
3] = Convert.ToInt32(ds.Tables[0].Rows[0]["count8"
].ToString());

Count2[
6] = Convert.ToInt32(ds.Tables[0].Rows[0]["count10"].ToString());//全年


Count2[
4]= Count2[0]+ Count2[1];
Count2[
5] = Count2[2]+ Count2[3
];


//显示折线效果

Font font3 =new System.Drawing.Font("Arial",10, FontStyle.Bold);
SolidBrush mybrush
=new
SolidBrush(Color.Red);
Point[] points1
=new Point[7
];
points1[
0].X=60; points1[0].Y=340- Count1[0];//从106纵坐标开始, 到(0, 0)坐标时

points1[1].X=140; points1[1].Y=340- Count1[1];
points1[
2].X=220; points1[2].Y=340- Count1[2
];
points1[
3].X=300; points1[3].Y=340- Count1[3
];

points1[
4].X=380; points1[4].Y=340- Count1[4
];
points1[
5].X=460; points1[5].Y=340- Count1[5
];

points1[
6].X=540; points1[6].Y=340- Count1[6
];
g.DrawLines(mypen2, points1);
//
绘制折线

//绘制数字

g.DrawString(Count1[0].ToString(), font3, Brushes.Red,58, points1[0].Y-20);
g.DrawString(Count1[
1].ToString(), font3, Brushes.Red,138, points1[1].Y-20
);
g.DrawString(Count1[
2].ToString(), font3, Brushes.Red,218, points1[2].Y-20
);
g.DrawString(Count1[
3].ToString(), font3, Brushes.Red,298, points1[3].Y-20
);

g.DrawString(Count1[
4].ToString(), font3, Brushes.Red,378, points1[4].Y-20
);
g.DrawString(Count1[
5].ToString(), font3, Brushes.Red,458, points1[5].Y-20
);

g.DrawString(Count1[
6].ToString(), font3, Brushes.Red,538, points1[6].Y-20
);

Pen mypen3
=new Pen(Color.Green,2
);
Point[] points2
=new Point[7
];
points2[
0].X=60; points2[0].Y=340- Count2[0
];
points2[
1].X=140; points2[1].Y=340- Count2[1
];
points2[
2].X=220; points2[2].Y=340- Count2[2
];
points2[
3].X=300; points2[3].Y=340- Count2[3
];

points2[
4].X=380; points2[4].Y=340- Count2[4
];
points2[
5].X=460; points2[5].Y=340- Count2[5
];

points2[
6].X=540; points2[6].Y=340- Count2[6
];
g.DrawLines(mypen3, points2);
//
绘制折线

//绘制通过人数

g.DrawString(Count2[0].ToString(), font3, Brushes.Green,61, points2[0].Y-15);
g.DrawString(Count2[
1].ToString(), font3, Brushes.Green,131, points2[1].Y-15
);
g.DrawString(Count2[
2].ToString(), font3, Brushes.Green,221, points2[2].Y-15
);
g.DrawString(Count2[
3].ToString(), font3, Brushes.Green,301, points2[3].Y-15
);

g.DrawString(Count2[
4].ToString(), font3, Brushes.Green,381, points2[4].Y-15
);
g.DrawString(Count2[
5].ToString(), font3, Brushes.Green,461, points2[5].Y-15
);

g.DrawString(Count2[
6].ToString(), font3, Brushes.Green,541, points2[6].Y-15
);

//绘制标识

g.DrawRectangle(new Pen(Brushes.Red),180, 390, 250,50); //绘制范围框
g.FillRectangle(Brushes.Red,270, 402, 20,10); //绘制小矩形
g.DrawString("报名人数", font2, Brushes.Red,292, 400);

g.FillRectangle(Brushes.Green,
270,422, 20, 10
);
g.DrawString(
"通过人数", font2, Brushes.Green,292, 420
);

System.IO.MemoryStream ms
=new
System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType
="image/Jpeg"
;
Response.BinaryWrite(ms.ToArray());
}
finally

{
g.Dispose();
image.Dispose();
}
}

 

 

三. 扇形统计图的绘制

效果图:

 

 

完整代码:

扇形统计图的绘制
privatevoid CreateImage()
{
//把连接字串指定为一个常量

SqlConnection Con=new SqlConnection("Server=(Local);
Database=committeeTraining;Uid=sa;Pwd=**");
Con.Open();
string cmdtxt= selectString;// "select * from ##Count";//

//SqlCommand Com = new SqlCommand(cmdtxt, Con);
DataSet ds =new DataSet();
SqlDataAdapter Da
=new
SqlDataAdapter(cmdtxt, Con);
Da.Fill(ds);
Con.Close();
float Total=0.0f
, Tmp;

//转换成单精度。也可写成Convert.ToInt32

Total = Convert.ToSingle(ds.Tables[0].Rows[0][this.count[0]]);

//
Total=Convert.ToSingle(ds.Tables[0].Rows[0][this.count[0]]);
//设置字体,fonttitle为主标题的字体

Font fontlegend =new Font("verdana",9);
Font fonttitle
=new Font("verdana",10
, FontStyle.Bold);

//背景宽

int width=350;
int bufferspace=15
;
int legendheight= fontlegend.Height*10+ 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 (int i=0; i<2; i++
)
colors.Add(
new SolidBrush(Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255
))));

//创建一个bitmap实例

Bitmap objbitmap =new Bitmap(width, height);
Graphics objgraphics
=
Graphics.FromImage(objbitmap);

//画一个白色背景

objgraphics.FillRectangle(new SolidBrush(Color.White),0, 0, width, height);

//画一个亮黄色背景

objgraphics.FillRectangle(new SolidBrush(Color.Beige), pierect);

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

float currentdegree=0.0f;

//画通过人数

objgraphics.FillPie((SolidBrush)colors[1], pierect, currentdegree,
Convert.ToSingle(ds.Tables[
0].Rows[0][this.count[1]])/ Total *360
);
currentdegree
+= Convert.ToSingle(ds.Tables[0].Rows[0][this.count[1]])/ Total *360
;

//未通过人数饼状图

objgraphics.FillPie((SolidBrush)colors[0], pierect, currentdegree,
((Convert.ToSingle(ds.Tables[
0].Rows[0][this.count[0]]))-(Convert.ToSingle(ds.Tables[0].Rows[0][this.count[1]])))/ Total *360
);
currentdegree
+= ((Convert.ToSingle(ds.Tables[0].Rows[0][this.count[0]]))-

(Convert.ToSingle(ds.Tables[
0].Rows[0][this.count[1]])))/ Total *360
;


//以下为生成主标题

SolidBrush blackbrush=new SolidBrush(Color.Black);
SolidBrush bluebrush
=new
SolidBrush(Color.Blue);
string title=" 机关单位成绩统计饼状图:"

+"\n \n\n";
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.Red,2), 0, height +10- legendheight, width, legendheight+50);

objgraphics.DrawString(
"----------------统计信息------------------"
,
fontlegend, bluebrush,
20, height- legendheight+ fontlegend.Height*1+1
);
objgraphics.DrawString(
"统计单位:"+this
.ddlTaget.SelectedItem.Text,
fontlegend, blackbrush,
20, height- legendheight+ fontlegend.Height*3+1
);
objgraphics.DrawString(
"统计年份:"+this
.ddlYear.SelectedItem.Text,
fontlegend, blackbrush,
20, height- legendheight+ fontlegend.Height*4+1
);
objgraphics.DrawString(
"统计期数:"+this
.ddlSpan.SelectedItem.Text,
fontlegend, blackbrush,
20, height- legendheight+ fontlegend.Height*5+1
);

objgraphics.FillRectangle((SolidBrush)colors[
1],5,height - legendheight + fontlegend.Height*8+1,10, 10
);
objgraphics.DrawString(
"报名总人数:"+ Convert.ToString(Convert.ToSingle(ds.Tables[0].Rows[0][this.count[0
]])),
fontlegend, blackbrush,
20, height- legendheight+ fontlegend.Height*7+1
);
objgraphics.FillRectangle((SolidBrush)colors[
0],5, height - legendheight + fontlegend.Height*9+1,10, 10
);
objgraphics.DrawString(
"通过总人数:"+ Convert.ToString(Convert.ToSingle(ds.Tables[0].Rows[0][this.count[1
]])),
fontlegend, blackbrush,
20, height- legendheight+ fontlegend.Height*8+1
);
objgraphics.DrawString(
"未通过人数:"+ ((Convert.ToSingle(ds.Tables[0].Rows[0][this.count[0]]))-

(Convert.ToSingle(ds.Tables[
0].Rows[0][this.count[1]]))), fontlegend, blackbrush, 20, height- legendheight+ fontlegend.Height*9+1
);

objgraphics.DrawString(
"通过率:"+ Convert.ToString((Convert.ToSingle(ds.Tables[0].Rows[0][this.count[1]])/

Convert.ToSingle(ds.Tables[
0].Rows[0][this.count[0]]))*100)+" %"
, fontlegend,
blackbrush,
20, height- legendheight+ fontlegend.Height*10+1
);

Response.ContentType
="image/Jpeg"
;
objbitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
objgraphics.Dispose();
objbitmap.Dispose();

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值