我必须使用产品更新DataGridView
。这些产品按类别分组。我为每个类别制作了Panel
。单击Panel
后,我想显示Panel
个列表,其中包含点击的Panel
中的产品。此外,当我点击列表中的Panel
时,我希望将其插入DataGridView
。这种情况可能吗?
屏幕截图:
截图说明:
- 类别位于左上角。
- 按下某个类别后,左侧会显示数据库记录列表。
- 当按下记录时,它会绑定到datagridview。
答案 0 :(得分:2)
我不明白GUI会是怎样的。截图将帮助我们更好。不确定点击面板是否是让用户打开某物的理想方式。希望小组有边界。
假设每个面板都标记了其类别对象。
private void button1_Click(object sender, EventArgs e)
{
List<Category> lstCategory = Manager.GetCategories();
int i = 5, j = 5;
foreach (Category cat in lstCategory)
{
Label label = new Label();
label.Text = cat.Name;
Panel panel = new Panel();
panel.Tag = cat;
panel.Controls.Add(label);
//if you already have panel created for categories, then start from here..
panel.Click += ((s, r) =>
{
List<Product> lstProduct = Manager.GetProducts((Category)panel.Tag);
int x = 5, y = 5;
foreach (Product product in lstProduct)
{
var pnl = new Panel();
pnl.BorderStyle = BorderStyle.Fixed3D;
pnl.Size = new Size(15, 15);
pnl.Location = new Point(20 + x, 20 + y); //position it properly.
this.Controls.Add(pnl);
pnl.Tag = product;
Label lbl = new Label();
lbl.Text = product.Name;
pnl.Controls.Add(lbl);
pnl.Click += ((p, q) =>
{
dataGridView1.Rows.Add(//according to pnl.Tag values
});
}
});
panel.BorderStyle = BorderStyle.FixedSingle;
panel.Size = new Size(15, 15);
panel.Location = new Point(20 + i, 20 + j); //position it properly.
this.Controls.Add(panel);
}
}
如果需要,您可以通过将必要的内容作为参数进行重构,将创建面板的代码重构为一种方法。