我有一个 datagridview 与来自数据库的数据绑定,工作正常。它在表单加载时加载数据。根据客户要求,我使用以下代码将新按钮列添加到数据网格视图
private void form1_load
{
var productsbycount = abc.products.GroupBy(x => x.product_Id).Select(a => new
{
productid = a.Key,
prouctnam = a.FirstOrDefault().product_Name,
productimage = a.FirstOrDefault().product_Image,
productdescr = a.FirstOrDefault().product_Description,
stockavailable = a.LongCount(),
productprice = a.FirstOrDefault().product_Price
});
productbindingsource.DataSource = productsbycount;
productgridview.DataSource = productbindingsource;
DataGridViewButtonColumn buttoncolumn = new DataGridViewButtonColumn();
productgridview.Columns.Add(buttoncolumn);
buttoncolumn.Text = "Buy";
buttoncolumn.HeaderText = "Buy";
buttoncolumn.UseColumnTextForButtonValue = true;
buttoncolumn.Name = "btnbuy";
productgridview.Columns[0].Visible = false;
}
当表单加载其工作正常时。
但我正在检查条件,例如如果我们在列表视图中选择任何项目,则数据网格视图根据所选项目进行排序......因为我已经这样做了......
if (lstviewcategories.SelectedItems[0].Value.ToString() == "All")
{
var productsbycount = abc.products.GroupBy(x => x.product_Id).Select(a => new
{
productid = a.Key,
prouctnam = a.FirstOrDefault().product_Name,
productimage = a.FirstOrDefault().product_Image,
productdescr = a.FirstOrDefault().product_Description,
stockavailable = a.LongCount(),
productprice = a.FirstOrDefault().product_Price
});
productbindingsource.DataSource = productsbycount;
productgridview.DataSource = productbindingsource;
DataGridViewButtonColumn buttoncolumn = new DataGridViewButtonColumn();
productgridview.Columns.Add(buttoncolumn);
buttoncolumn.Text = "Buy";
buttoncolumn.HeaderText = "Buy";
buttoncolumn.UseColumnTextForButtonValue = true;
buttoncolumn.Name = "btnbuy";
productgridview.Columns[0].Visible = false;
}
- 如果我单击列表视图的第一项(“全部”),则数据网格视图工作正常....
- 如果我再次单击 listview 第一项(“全部”),则按钮列出现两次....
- 如果我再次单击列表视图的第一项(“全部”),则按钮列将出现三次...
这是列表视图中所有项目发生的情况。
我的问题是,还有其他方法可以将按钮列添加到数据网格视图吗?
我试图在 form1.cs[design] 中添加按钮列,这将影响 datagridview 中的实际列。我正在使用 c# 语言在 winforms 中工作。任何人都可以对这些提出任何想法吗?
假设如果我在这个循环中删除下面的代码
if (lstviewcategories.SelectedItems[0].Value.ToString() == "All")
{
}
实际的按钮列消失了。有人可以帮忙吗?
修改代码:
第一个条件:if (lstviewcategories.SelectedItems[0].Text.ToString() == CategoryType.Type2) {
var productsbycount = abc.products.GroupBy(x => x.product_Id).Where(a => a.FirstOrDefault().product_Price > 0 && a.FirstOrDefault().product_Price <= 1000)
.Select(a => new
{
productid = a.Key,
prouctnam = a.FirstOrDefault().product_Name,
productimage = a.FirstOrDefault().product_Image,
productdescr = a.FirstOrDefault().product_Description,
stockavailable = a.LongCount(),
productprice = a.FirstOrDefault().product_Price
});
productbindingsource.ResetBindings(false);
/*productbindingsource.DataSource = productsbycount;
productgridview.DataSource = productbindingsource;
DataGridViewButtonColumn buttoncolumn = new DataGridViewButtonColumn();
productgridview.Columns.Add(buttoncolumn);
buttoncolumn.Text = "Buy";
buttoncolumn.HeaderText = "Buy";
buttoncolumn.UseColumnTextForButtonValue = true;
buttoncolumn.Name = "btnbuy";
productgridview.Columns[0].Visible = false;*/
}
第二个条件:
if (lstviewcategories.SelectedItems[0].Text.ToString() == CategoryType.Type3)
{
var productsbycount = abc.products.GroupBy(x => x.product_Id).Where(a => a.FirstOrDefault().product_Price > 500 && a.FirstOrDefault().product_Price <= 1000)
.Select(a => new
{
productid = a.Key,
prouctnam = a.FirstOrDefault().product_Name,
productimage = a.FirstOrDefault().product_Image,
productdescr = a.FirstOrDefault().product_Description,
stockavailable = a.LongCount(),
productprice = a.FirstOrDefault().product_Price
});
productbindingsource.ResetBindings(false);
/* productbindingsource.DataSource = productsbycount;
productgridview.DataSource = productbindingsource;
DataGridViewButtonColumn buttoncolumn = new DataGridViewButtonColumn();
productgridview.Columns.Add(buttoncolumn);
buttoncolumn.Text = "Buy";
buttoncolumn.HeaderText = "Buy";
buttoncolumn.UseColumnTextForButtonValue = true;
buttoncolumn.Name = "btnbuy";
productgridview.Columns[0].Visible = false;*/
}
这两个条件不起作用..