5

想象一个Item具有三个属性的类:

  • 项目名称(字符串)
  • 数量(整数)
  • ItemPrice价格(具有两个属性的类的数组/列表:供应商名称和价格)。

基本上,我想将此类绑定到 DataGridView,其中每一行都是类 Item。问题是,有不同数量的供应商(或者可以稍后编辑),并且数据绑定必须支持这种动态数量的供应商。

另外,作为奖励,我想添加一个额外的列,显示供应商的价格乘以数量。

不想使用虚拟模式(这就是我目前完成这项任务的方式)。

谢谢!

4

2 回答 2

0

您可以将表映射到动态创建的 datagridview。这是一个示例代码片段:

    public class ItemBinding
       {
        List<Item> itemList = new List<Item>();
        Item it = null;
        DataRow dr = null;
        public void mapping()
          {
                  for (int i = 0; i <= 4; i++)
                     {
                      it = new Item();
                      it.qty = i;
                      it.name = "name" + i;
                      it.itemprice.Vendorname="vendor" + i;
                      it.itemprice.price = 20 * i;
                      itemList.Add(it);
                     }
          }
         public void binding()
         {
              DataTable dt = new DataTable();

                   dt.Columns.Add(new DataColumn("item", typeof(string)));
                   dt.Columns.Add(new DataColumn("quantity", typeof(int)));
                   dt.Columns.Add(new DataColumn("vendor", typeof(string)));

              //item list contains the detail of the class

                    foreach (Item c in itemList)
                         {
                            dr = dt.NewRow();

                            dr[0] = c.qty;
                            dr[1] = c.name;
                            dr[2] = c.itemprice.Vendorname;;
                            dt.Rows.Add(dr);
                          }
                  dataGridView1.AutoGenerateColumns = true;
                  dataGridView1.DataSource = dt;
                   }
          }
    public class Item
         {
            public int qty{ get; set; }
            public string name { get; set; }
            public ItemPrice itemprice { get; set; }
            public Item()
                 {
                   this.itemprice = new ItemPrice();
                  }
         }

          public class ItemPrice
            {
             public string Vendorname { get; set; }      
             public int price { get; set; }
            }

在这种情况下 itemprice 是一个有两个嵌套的属性或者你可以继承它。这可能会对您有所帮助。

于 2012-12-24T13:41:22.510 回答
0

实现此目的的一种方法是在 Item 类(或新类或匿名类)上创建一个字符串属性,并实现此属性以将所有供应商和商品价格连接在一起。

这样做的缺点是,将字符串中的所有项目放在同一列中可能看起来很难看,并且无法以直观的方式编辑项目。

但是,它将实现显示任意数量的供应商和价格的目标,您可以轻松地将供应商价格乘以数量添加到此。

于 2012-10-25T04:18:07.617 回答