如何在datagridview中显示一些没有按钮的单元格和一些有按钮的单元格

How display some cell without button and some with a button in datagridview

我有一个 DataGridView,我希望在我的网格中有一个列,其中包含一些显示按钮的单元格和一些不包含按钮的单元格。 为了解决这个问题,我添加了一个 DataGridViewButtonColumn 并编写了这个方法,我调用它来将行添加到我的列中:

 private void AttachNewRow(bool validRow)
 {
     DataGridViewRow newRow = GetNewRow();
     if (validRow)
     {
         newRow.Cells["Info"].Value = "Click me";
     }
     else
     {
         // Here I would like to hide the button in the cell
         newRow.Cells["Info"].Value = null;
     }
 }

问题是,当我将单元格值设置为 null 时,我收到一个异常。 我如何在没有按钮的情况下显示其中的一些单元格? 谢谢

看起来你说的 GetNewRow() returns Row 已经插入 DGV.

如果该函数知道 'Info' Column 是否包含 Button,它可以传递它,也许在 Tag:

if (somecondiiotn) newRow.Columns["Info"].Tag = "Button";

那你可以这样写:

private void AttachNewRow()
{
    DataGridViewRow newRow = GetNewRow();
    if ( newRow.Cells["Info"].Tag == null || 
         newRow.Cells["Info"].Tag != "Button") return;
    //..

如果 otoh 调用 AttachNewRow() 的代码具有所需的知识,它可以改为在参数中传递它:

private void AttachNewRow(bool infoButton)

如果知识​​稍后可用,您仍然可以更改单个单元格。

更新:

由于您现在将条件传递给方法,因此您可以采取相应的行动。

我不知道为什么您的代码会出现异常 - 我不知道。但是要真正隐藏 Button 您应该将单元格更改为 'normal' DataGridViewTextBoxCell:

else
{
   DataGridViewCell cell = new DataGridViewTextBoxCell();
   newRow.Cells["Info"] = cell;

您可以在 RowAdded 事件处理程序中尝试类似的操作。这里假设第三列是按钮列:

if (condition)
        {

            dataGridView1.Rows[e.RowIndex].Cells[2]  = new DataGridViewTextBoxCell();
            dataGridView1.Rows[e.RowIndex].Cells[2].ReadOnly = true;
        }