想象一个Item
具有三个属性的类:
- 项目名称(字符串)
- 数量(整数)
ItemPrice
价格(具有两个属性的类的数组/列表:供应商名称和价格)。
基本上,我想将此类绑定到 DataGridView,其中每一行都是类 Item。问题是,有不同数量的供应商(或者可以稍后编辑),并且数据绑定必须支持这种动态数量的供应商。
另外,作为奖励,我想添加一个额外的列,显示供应商的价格乘以数量。
我不想使用虚拟模式(这就是我目前完成这项任务的方式)。
谢谢!
想象一个Item
具有三个属性的类:
ItemPrice
价格(具有两个属性的类的数组/列表:供应商名称和价格)。基本上,我想将此类绑定到 DataGridView,其中每一行都是类 Item。问题是,有不同数量的供应商(或者可以稍后编辑),并且数据绑定必须支持这种动态数量的供应商。
另外,作为奖励,我想添加一个额外的列,显示供应商的价格乘以数量。
我不想使用虚拟模式(这就是我目前完成这项任务的方式)。
谢谢!
您可以将表映射到动态创建的 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 是一个有两个嵌套的属性或者你可以继承它。这可能会对您有所帮助。
实现此目的的一种方法是在 Item 类(或新类或匿名类)上创建一个字符串属性,并实现此属性以将所有供应商和商品价格连接在一起。
这样做的缺点是,将字符串中的所有项目放在同一列中可能看起来很难看,并且无法以直观的方式编辑项目。
但是,它将实现显示任意数量的供应商和价格的目标,您可以轻松地将供应商价格乘以数量添加到此。