統計圖形種類繁多, 有柱狀圖, 折線圖, 扇形圖等等, 而統計圖形的繪製方法也有不少, 有Flash製做的統計圖形, 有水晶
報表生成統計圖形, 有專門製圖軟件製做, 也有編程
語言本身製做的;這裏咱們用就C# 製做三款最經典的統計圖: 柱狀圖, 折線圖和扇形圖;既然是統計, 固然須要數據, 這裏演示的數據存於Sql Server2000中, 三款統計圖形都是動態生成. 其中柱狀圖我會附上製做步驟, 其餘兩款統計圖直接附源碼.
說明: 需求不同, 統計圖形繪製後的顯示效果也不同, 好比這裏柱狀圖的主要需求是爲了比較每一期報名人數與經過人數的差, 所以會把兩根柱子放在一塊兒會使比較結果一目瞭然. 所以你們能夠根據須要靈活繪製.
一. 柱狀圖的繪製.
繪製步驟以下:
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.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.ToString(), font, Brushes.Blue, 25, y);
- y = y + 26;
- }
複製代碼
7. 定義數組
存儲數據庫中統計的數據
定義存儲統計數據的數組
- int[] Count1 = new int[7]; //存儲從數據庫讀取的報名人數
- int[] Count2 = new int[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());
複製代碼
最終柱狀圖的效果圖:
附件:
histogram.png
柱狀圖的完整代碼:
繪製柱狀統計圖的完整代碼
- private void 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.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.ToString(), font, Brushes.Blue, 25, y); //設置文字內容及輸出位置
- y = y + 26;
- }
- int[] Count1 = new int[7];
- int[] Count2 = new int[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();
- }
- }
複製代碼
二. 折線統計圖的繪製
效果:
附件:
line chart.png
折線圖的完整代碼:
折線圖的完整代碼
- private void 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.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.ToString(), font, Brushes.Red, 10, y); //設置文字內容及輸出位置
- y = y + 26;
- }
- int[] Count1 = new int[7];
- int[] Count2 = new int[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();
- }
- }
複製代碼
三. 扇形統計圖的繪製
效果圖:
附件:
fan chart.gif
完整代碼:
扇形統計圖的繪製
- private void 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();
- }
複製代碼
(文/ziyiFly 出處/博客園)