2010-07-21 4 views
0

J'ai un datatable comme ceci.comment formater le datatable en C#

User  Unit  Score 
kiran  testing  2 
kiran  demo  1 
kiran  TRacking 3.5 
manu  1234  .5 
manu  1567  3.5 
Priya  1689  9 
Tom   1567  2 
Tom   3454  5 
Peter  testing 2 
Peter  demo  2.5 

maintenant j'ai besoin résultat comme celui-ci dans un autre datatable

User  Svc  VSS 
    kiran  6.5 
    manu    4.0 
    Priya  9.0 
    Tom    7.0 
    Peter  4.5 

Je dois vérifier pour l'utilisateur leur unité en fonction de ce que je dois résumer le score si l'unité contient la chaîne alors les points valeur doit aller à une nouvelle colonne appelée datatable svc

si l'unité contient alors Integer les valeur de score devrait aller à une nouvelle colonne appelée vv

afin que le résultat final sera comme celui-ci

User  Svc  VSS 
     kiran  6.5 
     manu    4.0 
     Priya  9.0 
     Tom    7.0 
     Peter  4.5 

peut me aider comment y parvenir. Je suis nouveau à C# (je suis plus fraîche) son urgent tout code qui peut me aider à résoudre ce problème serait génial

+2

Désolé d'entendre vos devoirs c'est tard. Je ne pense pas que quelqu'un le fera pour vous. Vous devez mieux décrire ce que vous tentez de réaliser et également nous montrer ce que vous avez déjà essayé. –

+0

D'où vient votre datatable? Si c'est de, bien, une base de données, alors vous devriez garder tout cela dans sql. –

+0

bien fait ma réponse aider ou était-ce une perte de temps massive ?? – CRice

Répondre

1

Ce n'est pas testé, mais quelque chose comme ceci:

public class SvcVssRecord 
{ 
    public SvcVssRecord(double svc, double vss) 
    { 
     Svc = svc; 
     Vss = vss; 
    } 

    public double Svc { get; set; } 
    public double Vss { get; set; } 
} 

public class Builder 
{ 
    private readonly Dictionary<string, SvcVssRecord> _records; 

    public Builder() 
    { 
     _records = new Dictionary<string, SvcVssRecord>(); 
    } 

    public void Add(string user, string unit, double score) 
    { 
     int result; 
     bool scoreIsSvc = !int.TryParse(unit, out result); 

     if (!_records.ContainsKey(user)) 
     { 
      _records.Add(user, new SvcVssRecord(scoreIsSvc ? score : 0, scoreIsSvc ? 0 : score)); 
     } 
     else 
     { 
      if (scoreIsSvc) 
      { 
       _records[user].Svc += score; 
      } 
      else 
      { 
       _records[user].Vss += score; 
      } 

     } 
    } 

    public DataTable ToDataTable() 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add(new DataColumn("User")); 
     dt.Columns.Add(new DataColumn("Svc")); 
     dt.Columns.Add(new DataColumn("Vss")); 

     foreach(var key in _records.Keys) 
     { 
      DataRow dr = dt.NewRow(); 
      dr["User"] = key; 
      dr["Svc"] = _records[key].Svc; 
      dr["Vss"] = _records[key].Vss; 
      dt.Rows.Add(dr); 
     } 

     return dt; 
    } 
} 

public class Run 
{ 
    public void RunApp(DataTable source) 
    { 
     Builder b = new Builder(); 

     foreach (DataRow dr in source.Rows) 
     { 
      b.Add((string) dr["User"], (string) dr["Unit"], (double) dr["Score"]); 
     } 

     DataTable dt = b.ToDataTable(); 
    } 
}