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