数据表:
将数据查询出来后,放在一个DataTable(以下变量dt),查询代码省略
找到要画图的容器,在容器的Paint事件中写上代码:
private void ShangXing_Paint(object sender, PaintEventArgs e)
{
Graphics ShangXingTongJi = e.Graphics;//为控件创建绘画
//ShangXingTongJi.Clear(ShangXing.BackColor);
Pen pen = new Pen(Color.Black, 2);//创建笔
ShangXingTongJi.DrawEllipse(pen, 50, 140, 300, 300);//画圆
Brush myBrush = new SolidBrush(Color.Red);//填充颜色
Random myRandom = new Random();//随机数
float ShiDuShu = 0;//开始度数
float ZhongDuShu = 0;//最终度数
int ZongShu = 0;//数量总数
for (int i = 0; i < dt.Rows.Count; i++)
{
ZongShu += Convert.ToInt32(dt.Rows[i]["数量"]);
}
for (int i = 1; i < dt.Rows.Count + 1; i++)
{
string ShuLiang = dt.Rows[i - 1]["数量"].ToString();//单个物品数
myBrush = new SolidBrush(Color.FromArgb(myRandom.Next(0, 200), myRandom.Next(0, 200),
myRandom.Next(0, 200)));//随机颜色
ShangXingTongJi.DrawString("●" + dt.Rows[i - 1]["物品名称"] + ":" + ShuLiang,
new Font("宋体", 10), myBrush, 10, 10 * i * 2);//画字
decimal DuShu = Convert.ToDecimal(ShuLiang) / ZongShu * 360;//(占数:总数)*360=度数
ZhongDuShu = Convert.ToInt32(DuShu);
ShangXingTongJi.FillPie(myBrush, 50, 140, 300, 300, ShiDuShu, ZhongDuShu);
ShiDuShu = ShiDuShu + ZhongDuShu;
}
}
效果图: