Frage

Die Situation ist, dass ich eine Tabelle in der Rasteransicht erstellen muss, die so aussieht:

---------- | Id --- | --- name-- |--1/2002-- | --2/2002-- |--1/2003- | ........ | 2/2009 |
Cust1--|
Cust2--|
:
:
Ich habe zwei Tabellen in der Datenbank – Kunden und Bestellungen, über LINQ to SQL DataContext
ID und Name der Kunden, die ich aus einer einfachen Abfrage erhalte

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


dataGridOrdersPreview.DataSource = custInfo;

Und ich brauche einen Hinweis, wie man diese Spalten im Format t/Jahr generiert, wobei t das erste oder zweite Halbjahr des Jahres angibt, und wie man diesen generierten Spalten die Bestellungen jedes Kunden in dieser Sitzung des Jahres zuordnet (wobei nur die Kosten angezeigt werden).

[bearbeiten]

Bisher versuche ich so etwas:

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 „Kosten“ werden nur die summierten Kosten in dieser Jahressitzung für jeden Kunden erfasst.)

Und dann denke ich darüber nach, die Jahre und Sitzungen durchzusetzen und die Abfrageergebnisse irgendwie zu entsprechenden Spalten zu bekommen

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

Hier habe ich Spalten generiert, die ich möchte, und ich habe Befehle im Wörterbuch, wobei der Schlüssel der Spaltenname und der Wert die Befehle in dieser Spalte sind, aber ich brauche Hilfe beim Binden an diese Spalten

War es hilfreich?

Lösung

Die Art und Weise, wie ich es getan habe, ist, eine Klasse zu erstellen, die die Eigenschaften hat, die Sie zum Beispiel möchten,

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

Verwenden Sie dann das System.windows.Forms.BindingSource, nennen Sie es, dass CudordedsbindingSource und die Datenquelle auf eine Liste Ihrer neuen Klasse festlegen.

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

In diesem Fall müssen Sie den Code schreiben, um jedes Ergebnis Ihrer Abfrageergebnisse in eine Instanz von Beachtchen umzuwandeln und in MyListOfCustorders aufzubewahren.

Schließlich muss auch die Datenquelle der Netzansicht festgelegt werden:

gridView1.DataSource = CustOrdsBindingSource;

Das große Problem, das ich bei diesem Ansatz sehe, ist, dass Sie jedes Jahr die Haftklasse ändern müssen, es sei denn, es gibt einige Voodoo, die einige vorschlagen können, Eigenschaften zur Laufzeit in die Klasse einzufügen.

In jedem Fall hoffe ich, dass Sie einen Start haben.

Andere Tipps

Solange keine Zeilen aktualisiert/hinzugefügt/gelöscht werden, würde ich das Raster meiner Meinung nach einfach manuell erstellen.

Rufen Sie die Kundenliste und die Anzahl der Verkäufe in welchem ​​Jahr/in welcher Sitzung ab.Nehmen Sie dann im Formular diese Liste und erstellen Sie die erforderlichen Spalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top