现在的位置: 首页 > 综合 > 正文

在DataGridView控件中一次显示出多个圆饼图的原始程序代码

2013年03月11日 ⁄ 综合 ⁄ 共 2729字 ⁄ 字号 评论关闭

之前我们曾经提到过,您可以在Windows Form窗体上的一个DataGridView控件中一次显示出多个圆饼图(或其它形式的统计图表)以便能够一次检视多个群组数据的比例情况(如图表1所示)。当时并未列出原始程序代码,有读者希望能够提供原始程序代码,所以我们在此将其完整列出,与大家共享:(注:本程序范例将附于简体版的Visual C# 2005文件IO与资料存取秘诀」一书)

 

Option Strict On
Imports System.Data.SqlClient
Imports System.Drawing
Imports System.IO
Imports System.Drawing.Imaging
Public Class Form1

  ' 宣告各个私用变量。
  Private dirInfo As DirectoryInfo
  ' 此变量用来持有男女平均薪资的总和。
  Private TotalSalary As Long
  ' 此变量用来持有女性平均薪资。
  Private FemaleSalary As Long
  ' 此变量用来持有男性平均薪资。
  Private MaleSalary As Long
  ' 此变量用来持有女性空间之扇形区域之第二个边的角度。
  Private sweep As Single

  Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load

    Dim myPieChartTable As New DataTable
    myPieChartTable.Columns.Add("部门", GetType(System.String))
    myPieChartTable.Columns.Add("图形", GetType(System.Byte()))

    ' 利用 SqlConnectionStringBuilder 对象来构建连接字符串。
    Dim connectStringBuilder As New SqlConnectionStringBuilder()
    connectStringBuilder.DataSource = "(local)\SQLEXPRESS"
    connectStringBuilder.InitialCatalog = "北风贸易"
    connectStringBuilder.IntegratedSecurity = True

    Using cn1 As New SqlConnection(connectStringBuilder.ConnectionString)

      Dim cmdDepartment As New SqlCommand( _
        "SELECT DISTINCT 部门FROM 章立民研究室", cn1)

      cn1.Open()

      Using dr1 As SqlDataReader = cmdDepartment.ExecuteReader

        While dr1.Read

          ' 取得部门。            
          Dim strDepartment As String = dr1.GetSqlString(0).Value

          Dim myTable As New DataTable

          Using cn2 As New SqlConnection(connectStringBuilder.ConnectionString)

            Dim cmdLiming As New SqlCommand( _
              "SELECT 性别, AVG(目前薪资) AS 平均薪资 FROM 章立民研究室 " & _
              "WHERE 部门= @department GROUP BY 性别ORDER BY 性别", cn2)
            cmdLiming.Parameters.Add( _
              "@department", SqlDbType.NVarChar, 10).Value = strDepartment

            cn2.Open()

            Using dr2 As SqlDataReader = cmdLiming.ExecuteReader()
              myTable.Load(dr2, LoadOption.OverwriteChanges)
            End Using


            ' 将男女平均薪资的总和指派给变数 TotalSalary
            TotalSalary = CInt(myTable.Rows(0)(1)) + CInt(myTable.Rows(1)(1))

            ' 将女性平均薪资指派给变量 FemaleSalary
            FemaleSalary = CInt(myTable.Rows(0)(1))

            ' 将男性平均薪资指派给变量 MaleSalary
            MaleSalary = CInt(myTable.Rows(1)(1))

            ' 计算女性空间之扇形区域之第二个边的角度。
            sweep = CSng(360.0F * (FemaleSalary / TotalSalary))
          End Using

          Using objBitmap As New Bitmap(300, 330)
            Using objGraphics As Graphics = Graphics.FromImage(objBitmap)
              objGraphics.Clear(Drawing.Color.White)

              ' 宣告 Rectangle 结构变量,并指定X 坐标参数、Y 坐标参数、
              ' 宽度参数、高度参数,用来显示圆饼图的矩形大小。
              Dim rect As Rectangle = New Rectangle(40, 10, 200, 200)

              ' 宣告 Rectangle 结构变量,并指定 X 坐标参数、Y 坐标参数、
              ' 宽度参数、高度参数,用来当作圆饼图边界的矩形大小。
              Dim rect2 As Rectangle = New Rectangle(0, 0, 290, 320)

              ' 宣告 Rectangle 结构变量,并指定 X

抱歉!评论已关闭.