2009-05-04 9 views
0

La situation est, que je dois créer la table en vue de la grille qui ressemble à ceci:Génération de colonnes dans GridView (C#, LINQ)

---------- | ID --- | --- Name-- | --1/2002-- | --2/2002-- | --1/2003-- | ........ | 2/2009 |
Cust1-- |
Cust2-- |
:
:
J'ai deux tables dans db - Les clients et les commandes, throught LINQ to SQL DataContext
ID et le nom des clients à partir d'une je me fais requête simple

var custInfo = from cust in db.Customers 
       select new { ID = cust.Id, 
          FullName = cust.FirstName + " " + cust.LastName } 


dataGridOrdersPreview.DataSource = custInfo; 

et j'ai besoin un indice, comment générer les colonnes au format t/année où t indique le premier ou le second semestre et affecter aux colonnes générées les ordres de chaque client dans cette session de l'année (en affichant uniquement les coûts)

[edit]

En ce qui concerne maintenant, je suis essayant de quelque chose comme ceci:

var orders = from ord in db.Orders 
      group ord by ord.Id_cust into grouped 
      let costs = grouped 
       .Where(s => s.YearSession == session && s.Year == year) 
       .Select(a => new { Costs = a.Cost) }) 

      select new { ID = grouped.Key, 
          Name = custInfo 
          .Where(a => a.ID == grouped.Key) 
          .Select(j => j.Name).Single(), 
          Cost = ExtensionLibrary.Sum(costs, "\n") 
         }; 

(dans le coût d'obtenir que les coûts sommés de cette session de l'année pour chaque client)

et je pense itérer throuhgh les années et les séances et obtenir en quelque sorte les résultats de la requête aux colonnes correspondantes

while (year <= DateTime.Today.Year) 
     { 
      year++; 
      while (session < 2) 
      { 
       session++; 
       dataGridOrdersPreview.Columns.Add(session +"/"+ year); 
       col.Add((session +"/"+ year), 
         orders.Select(a => a.Cost).ToList()); 
       /* col is Dictionary<string, List<string> > */ 

      } 
      session = 0; 
     } 

ici, j'ai généré colonnes que je veux et j'ai o rders dans Dictionnaire où Clé est le nom de la colonne et la valeur sont des ordres dans cette colonne, mais j'ai besoin d'aide pour la relier à ces colonnes

+0

Comment décidez-vous quelles années montrer? Est-ce que vous montrez chaque année qui contient un ordre, ou un montant prédéfini, comme 7 ans? –

+0

Il montre chaque année de 2002 à l'année actuelle et s'il n'y a pas d'ordre, il laisse la cellule vide – mirekys

Répondre

0

La façon dont je l'ai vu est de créer une classe qui a les propriétés que vous voulez , par exemple,

class CustOrders 
{ 
    public string CustName {get; set;} 
    public int Orders2002-1 {get; set;} 
    public int Orders2002-2 {get; set;} 
    ... 
    public int Orders2009-1 {get; set;} 
} 

Ensuite, utilisez le System.Windows.Forms.BindingSource, appelez-le dire CustOrdsBindingSource et mis son DataSource à une liste de votre nouvelle classe.

List<CustOrders> myListOfCustOrders = new List<CustOrders>(); 
/* Code to populate myListOfCustOrders */ 
CustOrdsBindingSource.DataSource = myListOfCustOrders; 

Dans ce cas, vous devrez écrire le code pour convertir chaque résultat de résultats de la requête à une instance de CustOrders et le stocker dans myListOfCustOrders.

Enfin, la source de vue sur la grille de données devra également être réglé:

gridView1.DataSource = CustOrdsBindingSource; 

Le gros problème que je vois avec cette approche est que vous devrez changer la classe CustOrders chaque année à moins d'une voodoo certains peuvent suggérer d'insérer des propriétés dans la classe au moment de l'exécution.

De toute façon, j'espère que cela vous donne un début.

+0

Il est assez important pour moi que l'année actuelle se mette à jour automatiquement, mais je vous remercie pour votre réponse, je vais Essaie. – mirekys

0

Tant qu'il n'y aura pas de mise à jour/ajout/suppression de lignes, je pense que je générerais simplement cette grille manuellement.

Récupère la liste des clients et le nombre de ventes en quelle année/session. Et puis dans le formulaire, prenez cette liste et créez les colonnes nécessaires.

Questions connexes