如何在DataGridView中动态为同一列中的每个按钮获取不同的文本

时间:2018-10-10 08:13:15

标签: c# winforms button datagridview ado.net

我创建了一个具有datagridview的用户控件。然后我从datagridview的文本文件中动态添加行和列。

我的问题是我需要在每一行中都有按钮的列。在第一行中,按钮的文本为“ Test1”,在第二行中,“ Test2”的文本不同。

在Google上搜索后,我尝试了此代码

var testButton = new DataGridViewButtonColumn();
testButton.Name = "Test";
testButton.HeaderText = "Test";
testButton.UseColumnTextForButtonValue = true;

testButton.Text = "Test1";
this.dataGridView1.Columns.Add(testButton);

但这给我两个按钮文本都为​​“ Test1”。 enter image description here

2 个答案:

答案 0 :(得分:0)

假设您使用的是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.
    }
}

答案 1 :(得分:-2)

//Change the Button text property on a data-bound event 

    protected void YourDataGridViewId_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       // finding the button control..`enter code here`.

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
           Button YourbtnVariable = (Button)e.Row.FindControl("YourbuttonID");
           YourbtnVariable.Text = "Text"+e.Row.RowIndex+1;
           //e.Row.RowIndex+1 will give u index of row every time incremented with 1
        }

    }