[英]Generating Columns in GridView ( C#, LINQ )
情況是,我需要在網格視圖中創建表,如下所示:
---------- | ID --- | ---名稱-| --1 / 2002-- | --2 / 2002-- | --1 / 2003-- | ........ | 2/2009 |
Cust1-- |
Cust2-- |
:
:
我在db中有兩個表-客戶和訂單,從LINQ到SQL DataContext
我通過簡單的查詢獲得的客戶ID和名稱
var custInfo = from cust in db.Customers
select new { ID = cust.Id,
FullName = cust.FirstName + " " + cust.LastName }
dataGridOrdersPreview.DataSource = custInfo;
而且我需要一些線索,如何以t / year格式生成該列,其中t表示該年的上半年或下半年,並將該年度中每個客戶的訂單分配給生成的列(僅顯示費用)
[編輯]
到目前為止,我正在嘗試執行以下操作:
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;
}
在這里,我生成了想要的列,並且在Dictionary中有訂單,其中Key是列名,Value是該列中的訂單,但是我需要一些幫助將其綁定到該列
我所看到的完成方式是創建一個具有所需屬性的類,例如,
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;}
}
然后使用System.Windows.Forms.BindingSource,將其稱為CustOrdsBindingSource,並將其DataSource設置為新類的列表。
List<CustOrders> myListOfCustOrders = new List<CustOrders>();
/* Code to populate myListOfCustOrders */
CustOrdsBindingSource.DataSource = myListOfCustOrders;
在這種情況下,您將必須編寫代碼以將查詢結果的每個結果轉換為CustOrders的實例,並將其存儲在myListOfCustOrders中。
最后,還必須設置網格視圖的數據源:
gridView1.DataSource = CustOrdsBindingSource;
我看到的這種方法的最大問題是,除非有一些建議可以在運行時將屬性插入類的巫毒教,否則您每年都必須更改CustOrders類。
無論哪種方式,我希望這都能給您一個開始。
只要沒有行的更新/添加/刪除,我想我只會手動生成該網格。
獲取客戶列表以及在哪個年份/會話中獲得多少銷售的計數。 然后在表單中獲取該列表並創建所需的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.