0

情况是,我需要在网格视图中创建表格,如下所示:

----------| ID---|---姓名---|--1/2002--|--2/2002--|--1/2003--|........| 2/2009 |
客户1--|
客户2--|
:
:
我在 db 中有两个表 - 客户和订单,通过 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/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 是该列中的订单,但我需要一些帮助将其绑定到该列

4

2 回答 2

0

我看到它的方式是创建一个具有您想要的属性的类,例如,

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 类,除非有一些巫毒教可以建议在运行时将属性插入到类中。

不管怎样,我希望这能给你一个开始。

于 2009-05-04T14:39:02.517 回答
0

只要不会更新/添加/删除行,我想我会手动生成该网格。

获取客户列表和在哪一年/哪个时段的销售数量。然后在表单中获取该列表并创建所需的列。

于 2009-05-05T11:40:38.943 回答