【问题标题】:How to add a button to a column in the DataGridView如何将按钮添加到 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 ?

标签: c# winforms datagridview datatable datarow


【解决方案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";

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多