状況は、次のようなグリッド ビューでテーブルを作成する必要があるということです。
----------| ID---|---名前--|--1/2002--|--2/2002--|--1/2003--|......| 2009 年 2 月 |
顧客1--|
Cust2--|
:
:
データベースに 2 つのテーブルがあります - 顧客と注文、LINQ to SQL DataContext
ID と、単純なクエリから取得している顧客の名前
var custInfo = from cust in db.Customers
select new { ID = cust.Id,
FullName = cust.FirstName + " " + cust.LastName }
dataGridOrdersPreview.DataSource = custInfo;
そして、t が年の前半または後半を示す形式 t/year でその列を生成し、その生成された列に、その年のそのセッションでの各顧客の注文を割り当てる方法 (コストのみを表示する) についての手がかりが必要です。
[編集]
今のところ、私は次のようなことを試みています:
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")
};
( 各顧客のその年のセッションの合計コストのみを取得するコスト )
そして、年とセッションを反復し、何らかの方法でクエリ結果を対応する列に取得することを考えます
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;
}
ここで、必要な列を生成しました。キーが列名で、値がその列の順序であるディクショナリに順序がありますが、その列にバインドする助けが必要です