-
Das C#-Kreisdiagramm ist eigentlich eine sehr einfache Sache. Ich habe es gepostet, weil ich eine Funktion implementieren möchte, die durch keine Steuerung im Netzwerk erreicht werden kann.
Nachdem ich fast einen Tag lang im Internet gesucht hatte, war mir schwindelig, aber das Ergebnis war wirklich enttäuschend. Ich habe selbst eines gezeichnet, was hoffentlich nur drei Stunden gedauert hat
Bringen Sie Freunden in Not Hilfe und vermeiden Sie Umwege. Okay, kein Unsinn mehr. Es ist nicht nötig, etwas zu installieren.
Sie können es direkt verwenden. Wenn Sie in der C#.Net 2005-Umgebung und im XP-Betriebssystem eine Verbindung zur Datenbank für die dynamische Anzeige herstellen müssen, müssen Sie nur die übergebene Datentabelle ändern.
Da es oben keine Bemerkungen gibt, dachte ich, dass es sehr einfach sei, also habe ich es ignoriert. Ich glaube, dass es sehr einfach sein sollte, solange man es sorgfältig liest.
Erstellen Sie zunächst eine ASPX-Datei und veröffentlichen Sie den folgenden Code. Beachten Sie, dass der rote Teil in Ihren eigenen Dateinamen geändert werden kann.
Verwenden des Systems;
Verwenden von System.Collections;
mit System.ComponentModel;
Verwenden von System.Data;
Verwenden von System.Drawing;
mit System.Web;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.HtmlControls;
mit System.Drawing.Drawing2D;
mit System.Drawing.Imaging;
mit System.IO;
öffentliche Teilklasse Test_Chart: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Geben Sie hier den Benutzercode ein, um die Seite zu initialisieren
MemoryStream stream = new MemoryStream();
MemoryStream ColumnarStream = new MemoryStream();
Bitmap-Diagramm = null;
DataTable dt = new DataTable();
dt.Columns.Add("Ven", typeof(System.String));
dt.Columns.Add("BadQty", typeof(System.Int32));
dt.Rows.Add("Weihai, Shandong", 65);
dt.Rows.Add("Huangshan, Anhui",23);
dt.Rows.Add("Jiangsu Taihu",34);
dt.Rows.Add("Shaanxi Huashan",98);
dt.Rows.Add("Jinggang Mountain, Hunan",102);
dt.Rows.Add("Hainan Nanhai",74);
graph = GetPieGraph("Compex-Fehlerratenstatistik jeder Gruppe",600,500,100,30,dt);
graph.Save(stream, ImageFormat.Jpeg);
//Bildausgabe
Response.Clear();
Response.ContentType = "image/jpeg";
Response.BinaryWrite(stream.ToArray());
}
protected Bitmap GetPieGraph(string title, int width, int height, int left, int top, DataTable gdt)
{
Bitmap objbitmap = new Bitmap(width, height);
Grafikobjekte;
objgraphics = Graphics.FromImage(objbitmap);
objgraphics.Clear(Color.White);
StringFormat drawformat = new System.Drawing.StringFormat(StringFormatFlags.DirectionVertical);
StringFormat drawformat1 = new System.Drawing.StringFormat(StringFormatFlags.DisplayFormatControl);
objgraphics.DrawString(title, new Font("宋体", 16),Brushes.Black, 150, 5, drawformat1);
PointF symbolleg = new PointF(left, height-top-45);
PointF descleg = new PointF(left + 20, height - top - 45);
//Zeichne einen Rand
objgraphics.DrawRectangle(Pens.Black, 0, 0, width-1, height-1);
//Kleiner Rahmen im Bild
int h = gdt.Rows.Count / 4;
if (gdt.Rows.Count % 4 > 0)
{
h = h + 1;
}
objgraphics.DrawRectangle(Pens.Black, left-10, height-top-50,gdt.Rows.Count*70+10,20*h);
//Zeigen Sie, welche Farbe was darstellt
for (int i = 0; i < gdt.Rows.Count; i++)
{
if (i >= 4 && (i+1)%4==1)
{
symbolleg.Y += 20;
descleg.Y += 20;
symbolleg.X = links;
descleg.X = links + 20;
}
objgraphics.FillRectangle(new SolidBrush(getcolor(i)), symbolleg.X, symbolleg.Y, 12, 10);
objgraphics.DrawRectangle(Pens.Black, symbolleg.X, symbolleg.Y, 12, 10);
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, descleg);
symbolleg.X += 100;
descleg.X += 100;
}
float sglcurrentangle = 0;
float sgltotalangle = 0;
float sgltotalvalues = 0;
for (int i = 0; i < gdt.Rows.Count; i++)
{
sgltotalvalues += float.Parse(gdt.Rows[i][1].ToString().Trim());
}
for (int i = 0; i < gdt.Rows.Count; i++)
{
sglcurrentangle = float.Parse(gdt.Rows[i][1].ToString().Trim()) / sgltotalvalues * 360;
objgraphics.FillPie(new SolidBrush(getcolor(i)), left+50, top+30, 300, 300, sgltotalangle, sglcurrentangle);
objgraphics.DrawPie(Pens.Black, left + 50, top + 30.300, 300, sgltotalangle, sglcurrentangle);
//Radius r
doppeltes r = 300 / 2;
//Kreismittenposition:
double cX = links + 50 + r;
doppeltes cY = oben + 30 + r;
//Die Koordinaten des Punktes auf dem Kreis:
double dX = r * Math.Cos((360 - sgltotalangle - sglcurrentangle / 2) * 3.14 / 180);
double dY = r * Math.Sin((360 - sgltotalangle - sglcurrentangle / 2) * 3.14 / 180);
//Position auf dem Kreis:
doppelt dcX = cX + dX;
doppeltes dcY = cY - dY;
//Radius r
doppelt r1 = 350 / 2;
//Kreismittenposition:
double cX1 = links + 50 + r;
double cY1 = top + 30 + r;
//Die Koordinaten des Punktes auf dem Kreis:
double dX1 = r1 * Math.Cos((360 - sgltotalangle - sglcurrentangle / 2) * 3.14 / 180);
double dY1 = r1 * Math.Sin((360 - sgltotalangle - sglcurrentangle / 2) * 3.14 / 180);
//Position auf dem Kreis:
double dcX1 = cX1 + dX1;
doppeltes dcY1 = cY1 - dY1;
objgraphics.DrawLine(Pens.Black,Convert.ToInt32(dcX) ,Convert.ToInt32(dcY),Convert.ToInt32(dcX1), Convert.ToInt32(dcY1));
if (dX1 >= 0 && dY1 >= 0)
{
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1), Convert.ToInt32(dcY1 - 5 ));
}
if (dX1 <= 0 && dY1 >= 0)
{
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1 - 25), Convert.ToInt32(dcY1 - 15));
}
if (dX1 <= 0 && dY1 <= 0)
{
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1 - 30), Convert.ToInt32(dcY1 ));
}
if (dX1 >= 0 && dY1 <= 0)
{
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1), Convert.ToInt32(dcY1)) ;
}
//GetLet(left + 50+150, top + 30+150,300,sgltotalangle, sglcurrentangle,arrvalues[i].ToString());
sgltotalangle += sglcurrentangle;
}
objbitmap zurückgeben;
}
protected void GetLet(int startX, int startY, double dia, double totalAngle, double currentAngle, string leg)
{
doppeltes x = 0;
doppeltes y = 0;
doppelt r = dia / 2;
x = r * Math.Cos((360 - totalAngle - currentAngle / 2) * 3.14 / 180);
y = r * Math.Sin((360 - totalAngle - currentAngle / 2) * 3,14 / 180);
}
protected Farbe getcolor(int itemindex)
{
Farbe objcolor;
if (itemindex >= 14)
{
Artikelindex = Artikelindex % 14;
}
if (itemindex == 0)
{
objcolor = Color.DarkMagenta;
}
sonst wenn (itemindex == 1)
{
objcolor = Color.MediumAquamarine;
}
sonst wenn (itemindex == 2)
{
objcolor = Color.DeepSkyBlue;
}
sonst wenn (itemindex == 3)
{
objcolor = Color.DarkRed;
}
sonst wenn (itemindex == 4)
{
objcolor = Color.Pink;
}
sonst wenn (itemindex == 5)
{
objcolor = Color.Salmon;
}
sonst wenn (itemindex == 6)
{
objcolor = Color.Khaki;
}
sonst wenn (itemindex == 7)
{
objcolor = Color.Maroon;
}
sonst wenn (itemindex == 8)
{
objcolor = Color.LawnGreen;
}
sonst wenn (itemindex == 9)
{
objcolor = Color.LightGoldenrodYellow;
}
sonst wenn (itemindex == 10)
{
objcolor = Color.Moccasin;
}
sonst wenn (itemindex == 11)
{
objcolor = Color.YellowGreen;
}
sonst wenn (itemindex == 12)
{
objcolor = Color.DarkCyan;
}
sonst wenn (itemindex == 13)
{
objcolor = Color.SteelBlue;
}
sonst wenn (itemindex == 14)
{
objcolor = Color.Tomato;
}
anders
{
objcolor = Color.SlateGray;
}
return objcolor;
}
}