Daha önce burada yapmış olduğum Anket uygulaması nasıl olurda pasta grafiği ile gösterilir dedim, böyleymiş.
Bitmap myB = new Bitmap(500, 400);
Graphics g = Graphics.FromImage(myB);
g.Clear(Color.White);
Rectangle hedRec = new Rectangle(0, 0, 500, 75);
Rectangle hedRecShadow = new Rectangle(1, 1, 500, 75);
Rectangle pieRec = new Rectangle(5, 100, 200, 200);
StringFormat strF = new StringFormat();
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
strF.Alignment = StringAlignment.Center;
XPathDocument pDoc = new XPathDocument(Server.MapPath("./App_Data/anket.xml"));
XPathNavigator nav = pDoc.CreateNavigator();
int toplamCevap = Convert.ToInt32(nav.Evaluate("count(/Anket/cevap)"));
int toplamOy = Convert.ToInt32(nav.Evaluate("sum(/Anket/cevap)"));
float angel = 0, sweep = 0, oran = 0;
string header = nav.SelectSingleNode("Anket").GetAttribute("ad", "");
g.DrawString(header, new Font("arial", 20, FontStyle.Bold), Brushes.Gray, hedRecShadow, strF);
g.DrawString(header, new Font("arial", 20, FontStyle.Bold), Brushes.Goldenrod, hedRec, strF);
g.DrawLine(new Pen(Color.Black), 5, 75, 495, 75);
XPathNodeIterator nodes = nav.Select("Anket/cevap");
int top = 125;
while(nodes.MoveNext())
{
sweep = 360 * Convert.ToSingle(nodes.Current.InnerXml) / toplamOy;
g.FillPie(new SolidBrush(Color.FromName(nodes.Current.GetAttribute("renk", ""))), pieRec, angel, sweep);
oran = 100 * Convert.ToSingle(nodes.Current.InnerXml) / toplamOy;
g.DrawString("% " + oran.ToString("n"), new Font("arial", 9, FontStyle.Regular), Brushes.Black, 250, top);
g.FillRectangle(new SolidBrush(Color.FromName(nodes.Current.GetAttribute("renk", ""))), 320, (top - 6), 20, 20);
g.DrawString(nodes.Current.GetAttribute("text", ""), new Font("arial", 9, FontStyle.Regular), Brushes.Black, 355, top);
angel += sweep;
top += 35;
}
MemoryStream mem = new MemoryStream();
myB.Save(mem, System.Drawing.Imaging.ImageFormat.Gif);
Response.BinaryWrite(mem.ToArray());
sonuç:
