Domanda

La situazione è che ho bisogno di creare una tabella in vista griglia simile a questa:

---------- | ID --- | --- nome-- | --1 / 2002-- | --2 / 2002-- | --1 / 2003-- | ........ | 2/2009 |
Cust1-- |
Cust2-- |
:
:
Ho due tabelle in db: clienti e ordini, tramite LINQ to SQL DataContext
ID e nome dei clienti che ricevo da una semplice query

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


dataGridOrdersPreview.DataSource = custInfo;

E ho bisogno di qualche indizio, come generare quelle colonne in formato t / anno in cui t indica la prima o la seconda metà dell'anno e assegnare a quelle colonne generate gli ordini di ciascun cliente in quella sessione dell'anno (mostrando solo costi)

[modifica]

Fino ad ora, sto tentando di fare qualcosa del genere:

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

(in Costo ottenere solo i costi sommati nella sessione di quell'anno per ciascun cliente)

e poi penso a ripetere gli anni e le sessioni e ottenere in qualche modo la query risulta nelle colonne corrispondenti

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;
        }

Qui ho generato colonne che desidero e ho ordini nel dizionario in cui Chiave è il nome della colonna e Valore sono ordini in quella colonna, ma ho bisogno di aiuto per legarla a quelle colonne

È stato utile?

Soluzione

Il modo in cui l'ho visto è creare una classe che abbia le proprietà desiderate, ad esempio

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;}
}

Quindi utilizza System.Windows.Forms.BindingSource, chiamalo dire CustOrdsBindingSource e imposta l'origine dati su un elenco della tua nuova classe.

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

In questo caso dovrai scrivere il codice per convertire ogni risultato dei risultati della tua query in un'istanza di CustOrders e archiviarlo in myListOfCustOrders.

Infine, anche l'origine dati della vista griglia dovrà essere impostata:

gridView1.DataSource = CustOrdsBindingSource;

Il grande problema che vedo con questo approccio è che dovrai cambiare la classe CustOrders ogni anno a meno che non ci sia del voodoo che alcuni possano suggerire di inserire proprietà nella classe in fase di esecuzione.

Ad ogni modo, spero che questo ti dia un inizio.

Altri suggerimenti

Finché non ci saranno aggiornamenti / aggiunte / eliminazioni di righe, penso che genererei manualmente quella griglia.

Recupera l'elenco dei clienti e il conteggio di quante vendite in quale anno / sessione. E poi nel modulo prendi quell'elenco e crea le colonne necessarie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top