2010-04-21 29 views
6

Tengo un control de gráfico que quiero hacer desde una tabla de datos.Controles de gráfico ASP.NET: ¿cómo creo este gráfico de barras?

la mesa se ve así:

alt text http://www.freeimagehosting.net/uploads/5d02ce1558.png

la tabla quiero se verá así:

''' 
'''' 
'''''  '' ' 
'''''  '' ' 
ECCTMP  ECCTMP  ECCTMP 
Monday  Tuesday  Wednesday 

esperanza que esto tiene sentido para cada día de su agrupados por el tipo (correo electrónico, llamadas).

¿Estoy seguro de cómo relacionarlo?

Billy

+0

¿Puede dar más detalles sobre la estructura de back-end de la tabla de datos? –

Respuesta

5

Si usted está buscando para la serie de grupo en un gráfico de barras a continuación, tendrá que utilizar el método Chart.DataBindTable (MSDN).

Apenas añada el siguiente código:

Chart1.DataBindTable(IEtable, "Day"); 

Esto producirá un gráfico que se ve algo como lo siguiente: alt text

Aquí hay algo de código ficticio para su uso como una prueba:

DataTable table = new DataTable(); 
table.Columns.Add("Day", typeof(string)); 
table.Columns.Add("Email", typeof(int)); 
table.Columns.Add("Calls", typeof(int)); 
table.Columns.Add("Contacts", typeof(int)); 
table.Columns.Add("Tasks", typeof(int)); 
table.Columns.Add("Meetings", typeof(int)); 
table.Columns.Add("Proposals", typeof(int)); 

table.Rows.Add("Monday", 1, 3, 3, 4, 5, 5); 
table.Rows.Add("Tuesday", 1,6,8,2,0,3); 
table.Rows.Add("Wednesday", 7, 6,3,0,2,1); 
table.Rows.Add("Thursday", 1,5,5,9,3,1); 
table.Rows.Add("Friday", 4,7,3,5,2,3); 

//convert datatable to a IEnumerable form 
var IEtable = (table as System.ComponentModel.IListSource).GetList(); 

//Bind the datatable to the chart using the DataBindTable method 
Chart1.DataBindTable(IEtable, "Day"); 

También es posible que las etiquetas aparezcan como se describe con ECCTMP, pero agregar una leyenda probablemente se vea más clara.

+0

Este código se ve brillante gracias, no puedo esperar para probarlo. ¡Te dejaré saber cómo me llevo! – iamjonesy

+1

Me alegra saber que está funcionando para usted. También es posible cambiar las etiquetas como escribió en su pregunta para que aparezcan como "ECCTMP Monday", pero asumí que la Leyenda funcionaría igual de bien para usted. –

+0

@Alison, es un gráfico de columnas a la derecha, si quiero lo mismo en el gráfico de barras, ¿cómo lo haré? Probé con el mismo código, pero arroja un error "Ejes del área del gráfico: el área del gráfico contiene tipos de gráficos incompatibles. Por ejemplo, los gráficos de barras y los gráficos de columnas no pueden existir en el mismo área del gráfico". Creo que falta algo en el margen. – Rishi

0
protected void Page_Load(object sender, EventArgs e) 
    { 

     Title tl = new Title("Players Score Card"); 
     tl.Font = new System.Drawing.Font("vardana",12); 
     //chrtGroup.Titles.Add(tl); 
     //ChartArea a = new ChartArea("players"); 
     //a.AxisX.Title = "Player's Yearwise"; 
     //a.AxisY.Title = "Scores"; 
     //chrtGroup.ChartAreas.Add(a); 


     DataTable dt = new DataTable(); 
     dt.Columns.Add("Years", typeof(int)); 
     dt.Columns.Add("Afridi", typeof(int)); 
     dt.Columns.Add("Akmal", typeof(int)); 
     dt.Columns.Add("Nasir", typeof(int)); 
     dt.Columns.Add("Shoib",typeof(int)); 
     dt.Columns.Add("Hafiz", typeof(int)); 


     Random rn = new Random(); 
     for (int i = 1; i < 10; i++) 
     { 
      DataRow dr = dt.NewRow(); 
      dr["Years"] = "200" +i; 
      dr["Afridi"] = 700 + rn.Next(200,800); 
      dr["Akmal"] = 500 + rn.Next(200,800); 
      dr["Nasir"] = 400 + rn.Next(200,800); 
      dr["Shoib"] = 800 + rn.Next(300,500); 
      dr["Hafiz"] = 200 + rn.Next(200, 900); 
      dt.Rows.Add(dr); 
     } 

     Series afridi = new Series("Afridi"); 
     Series akmal = new Series("Akmal"); 
     Series nasir = new Series("Nasir"); 
     Series shoib = new Series("Shoib"); 
     Series hafiz = new Series("Hafiz"); 

     afridi.IsValueShownAsLabel = true; 
     akmal.IsValueShownAsLabel = true; 
     nasir.IsValueShownAsLabel = true; 
     shoib.IsValueShownAsLabel = true; 
     hafiz.IsValueShownAsLabel = true; 

     foreach (DataRow r in dt.Rows) 
     { 
      afridi.Points.AddXY(Convert.ToDouble(r["Years"]),Convert.ToDouble(r["Afridi"])); 
      akmal.Points.AddXY(Convert.ToDouble(r["Years"]), Convert.ToDouble(r["Akmal"])); 
      nasir.Points.AddXY(Convert.ToDouble(r["Years"]),Convert.ToDouble(r["Nasir"])); 
      shoib.Points.AddXY(Convert.ToDouble(r["Years"]), Convert.ToDouble(r["Shoib"])); 
      hafiz.Points.AddXY(Convert.ToDouble(r["Years"]), Convert.ToDouble(r["Hafiz"])); 
     } 

     chrtGroup.Series.Add(afridi); 
     chrtGroup.Series.Add(akmal); 
     chrtGroup.Series.Add(nasir); 
     chrtGroup.Series.Add(shoib); 
     chrtGroup.Series.Add(hafiz); 

     chrtGroup.Legends.Add(new Legend("Afridi")); 
     chrtGroup.Legends.Add(new Legend("Akmal")); 
     chrtGroup.Legends.Add(new Legend("Nasir")); 
     chrtGroup.Legends.Add(new Legend("Shoib")); 
     chrtGroup.Legends.Add(new Legend("Hafiz")); 
    } 
} 
Cuestiones relacionadas