2010-04-21 10 views
6

Vous avez un contrôle graphique que vous voulez créer à partir d'une table de données.Contrôles graphiques ASP.NET - comment créer ce graphique à barres?

la table ressemble à ceci:

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

le tableau que je veux ressemblera à ceci:

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

espoir cela a un sens pour chaque jour son regroupés par type (e-mail, appels).

Je suis juste maintenant sûr comment databind il?

Billy

+0

Pouvez-vous donner plus de détails sur la structure dorsale de la datatable? –

Répondre

5

Si vous cherchez à des séries de groupe dans un graphique à barres, alors vous aurez besoin d'utiliser la méthode Chart.DataBindTable (MSDN).

il suffit d'ajouter le code suivant:

Chart1.DataBindTable(IEtable, "Day"); 

Cela produira un tableau qui ressemble à quelque chose comme ce qui suit: alt text

Voici un code factice à utiliser comme un test:

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"); 

Il est également possible que les étiquettes apparaissent comme vous le décrivez avec ECCTMP mais l'ajout d'une légende semblera probablement plus propre.

+0

Ce code semble brillant merci, ne peut pas attendre pour l'essayer. Je vais vous laisser savoir comment je m'entends! – iamjonesy

+1

Content d'entendre que ça marche pour vous. Il est également possible de changer les étiquettes comme vous l'avez écrit dans votre question afin qu'elles apparaissent comme "ECCTMP Monday" mais j'ai supposé que la légende fonctionnerait aussi bien pour vous. –

+0

@Alison, c'est le graphique à colonnes à droite, si je veux même dans le graphique à barres alors comment vais-je le faire? J'ai essayé le même code mais il génère une erreur "Axes de la zone de graphique - La zone de graphique contient des types de graphiques incompatibles, par exemple, les diagrammes à barres et les diagrammes à colonnes ne peuvent pas exister dans la même zone de diagramme. Je crois qu'il manque quelque chose dans les balisages. – 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")); 
    } 
}