datagridview中按钮列增加的数量
本文关键字:增加 按钮 datagridview | 更新日期: 2023-09-27 18:06:58
我已经使用以下方法填充了datagridview,我也添加了按钮列:
private void populatedatagridview()
{
categorieslist();
productgridview.RowTemplate.Height = 130;
var productsbycount = axe.products.GroupBy(x => x.product_Id).Select(a => new
{
productid = a.Key,
productnam = 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 column = new DataGridViewButtonColumn();
productgridview.Columns.Add(column);
column.FlatStyle = FlatStyle.System;
column.DefaultCellStyle.ForeColor = Color.ForestGreen;
column.DefaultCellStyle.Padding = new Padding(10,48,10,48);
column.Text = "Buy";
column.HeaderText = "Buy";
column.UseColumnTextForButtonValue = true;
column.Name = "btnbuy";
productgridview.Columns[0].Visible = false;
for (int i = 0 ; i < productgridview.Columns.Count; i++)
if (productgridview.Columns[i] is DataGridViewImageColumn)
{
((DataGridViewImageColumn)productgridview.Columns[i]).ImageLayout = DataGridViewImageCellLayout.Stretch;
break;
}
}
我的问题是每当我调用这个函数,数据网格视图添加另一个按钮列,所以它会自动增加按钮列的数量。
我有一个组合框,我想要根据组合框文本填充数据网格视图。这时我还必须调用这个函数。
不幸的是,每当调用该函数时,它会一次又一次地自动添加按钮列。有人能帮帮忙吗?
更改此块:
DataGridViewButtonColumn column = new DataGridViewButtonColumn();
productgridview.Columns.Add(column);
column.FlatStyle = FlatStyle.System;
column.DefaultCellStyle.ForeColor = Color.ForestGreen;
column.DefaultCellStyle.Padding = new Padding(10, 48, 10, 48);
column.Text = "Buy";
column.HeaderText = "Buy";
column.UseColumnTextForButtonValue = true;
column.Name = "btnbuy";
:
if (productgridview.Columns["btnbuy"] == null)
{
DataGridViewButtonColumn column = new DataGridViewButtonColumn();
productgridview.Columns.Add(column);
column.FlatStyle = FlatStyle.System;
column.DefaultCellStyle.ForeColor = Color.ForestGreen;
column.DefaultCellStyle.Padding = new Padding(10, 48, 10, 48);
column.Text = "Buy";
column.HeaderText = "Buy";
column.UseColumnTextForButtonValue = true;
column.Name = "btnbuy";
}
每次你的方法被调用你得到额外的列,因为你的方法添加了列:
productgridview.Columns.Add(column);
我会将格式化DataGridView的代码与数据绑定它的代码分开。只需运行一次格式化网格的代码,并在需要时运行数据绑定的代码。
你的populatedatagridview
方法实际上做了两件事:查询数据源并将查询结果绑定到你的网格,并通过添加列和设置某些列的ImageLayout属性来改变你的DataGridView的外观。
我会删除所有的代码,改变你的网格的外观到一个新的方法和调用,只有一次,也许在你的表单加载。这使得populatedatagridview
只负责填充您的DataGridView。