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;
        }
}

我的问题是每当我调用这个函数,数据网格视图添加另一个按钮列,所以它会自动增加按钮列的数量。

我有一个组合框,我想要根据组合框文本填充数据网格视图。这时我还必须调用这个函数。

不幸的是,每当调用该函数时,它会一次又一次地自动添加按钮列。有人能帮帮忙吗?

datagridview中按钮列增加的数量

更改此块:

        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。