如何将按钮添加到 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 语句中的列绑定(不添加新列)?
如何根据 c# winforms 中的列日期和名称将 sql 中的数据输入到特定的 datagridview 单元格中
winform dataGridView中如何添加单选按钮列?