如何将按钮添加到 DataGridView 中的列

Posted

技术标签:

【中文标题】如何将按钮添加到 DataGridView 中的列【英文标题】:How to add a button to a column in the DataGridView 【发布时间】:2014-02-07 03:22:33 【问题描述】:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Software Title", typeof(string)));
dt.Columns.Add(new DataColumn("Version", typeof(string)));
dt.Columns.Add(new DataColumn("Uninstall", typeof(System.Windows.Forms.Button)));

DataRow dr = dt.NewRow();
dr[0] = "App";
dr[1] = "1.0";
Button uninstall = new Button();
uninstall.Text = "Uninstall";

dr[2] = uninstall;

dt.Rows.Add(dr);

dataGridViewSoftware.DataSource = dt;

文本出现,但按钮从未出现。

【问题讨论】:

您的目标是什么类型的应用程序,您不必在 DataTable 中添加按钮,而是必须在 gridview 中添加一个带有按钮的列。 您的目标是什么类型的应用程序? Winform、WPF、ASP.Net ? 【参考方案1】:

假设您在 Windows 窗体中,您需要将 DataGridViewButtonColumn 添加到您的 DataGridView - 而不是直接添加到 DataTable

这应该发生在您将DataTable 绑定到DataGridView 之后的某个地方。

这样的事情应该可以工作:

DataGridViewButtonColumn uninstallButtonColumn = new DataGridViewButtonColumn();
uninstallButtonColumn.Name = "uninstall_column";
uninstallButtonColumn.Text = "Uninstall";
int columnIndex = 2;
if (dataGridViewSoftware.Columns["uninstall_column"] == null)

    dataGridViewSoftware.Columns.Insert(columnIndex, uninstallButtonColumn);

当然,您必须处理网格的CellClick 事件才能对按钮执行任何操作。

在 DataGridView 初始化代码中的某处添加它

dataGridViewSoftware.CellClick += dataGridViewSoftware_CellClick;

然后创建处理程序:

private void dataGridViewSoftware_CellClick(object sender, DataGridViewCellEventArgs e)

    if (e.ColumnIndex == dataGridViewSoftware.Columns["uninstall_column"].Index)
    
        //Do something with your button.
    

【讨论】:

什么是按钮栏? 没关系。我看到你的意思是说uninstallButtonColumn而不是buttonColumn。如何攻击 cellclick 事件? 编辑了我的答案以解决这个问题......您可能应该阅读事件处理。 应该编辑答案以包含UseColumnTextForButtonValue,否则按钮内部将没有任何文本。 上例中缺少重要的一行请添加“uninstallButtonColumn.UseColumnTextForButtonValue = true;”【参考方案2】:

让它变得简单。

DataGridViewButtonColumn button = new DataGridViewButtonColumn();

    button.Name = "button";
    button.HeaderText = "Button";
    button.Text = "Button";
    button.UseColumnTextForButtonValue = true; //dont forget this line
    this.dataGridView1.Columns.Add(button);

【讨论】:

没有UseColumnTextForButtonValue的每一行按钮都没有任何内容! @user3454439 是的,别忘了那一行【参考方案3】:

您可以使用下面的最佳方法

                gvEmployees.AutoGenerateColumns = false;
                gvEmployees.ColumnCount = 4;


                DataGridViewButtonColumn SelectButton = new DataGridViewButtonColumn();
                SelectButton.Name = "Select";
                SelectButton.Text = "Select";
                SelectButton.UseColumnTextForButtonValue = true;
                if (gvEmployees.Columns["Select"] == null)
                
                    gvEmployees.Columns.Insert(0, SelectButton);
                

                DataGridViewButtonColumn DeleteButton = new DataGridViewButtonColumn();
                DeleteButton.Name = "Delete";
                DeleteButton.Text = "Delete";
                DeleteButton.UseColumnTextForButtonValue = true;
                if (gvEmployees.Columns["Delete"] == null)
                
                    gvEmployees.Columns.Insert(1, DeleteButton);
                

                gvEmployees.Columns[2].Name = "EmployeeID";
                gvEmployees.Columns[2].HeaderText = "EmployeeID";
                gvEmployees.Columns[2].DataPropertyName = "EmployeeID";

【讨论】:

以上是关于如何将按钮添加到 DataGridView 中的列的主要内容,如果未能解决你的问题,请参考以下文章

如何将 dataGridView 预定义列与 sql 语句中的列绑定(不添加新列)?

datagridview中如何添加一列自动编号的列

如何根据 c# winforms 中的列日期和名称将 sql 中的数据输入到特定的 datagridview 单元格中

winform dataGridView中如何添加单选按钮列?

C#中怎样将dataGridView中的新添加的一行数据添加到数据库中

如何将文本转换为DataGridView中的列?