0

我有一个 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 时,我收到一个异常。如何在没有按钮的情况下显示其中一些单元格?谢谢

4

2 回答 2

2

看起来你正在谈论的GetNewRow()回报已经插入.RowDGV

如果该函数知道“信息”是否Column应包含 a 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;
    //..

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

private void AttachNewRow(bool infoButton)

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

更新:

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

我不知道为什么你的代码会出现异常——我不知道。但要真正隐藏Button你应该将单元格更改为“正常” DataGridViewTextBoxCell

else
{
   DataGridViewCell cell = new DataGridViewTextBoxCell();
   newRow.Cells["Info"] = cell;
于 2015-01-15T16:43:49.540 回答
1

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

if (condition)
        {

            dataGridView1.Rows[e.RowIndex].Cells[2]  = new DataGridViewTextBoxCell();
            dataGridView1.Rows[e.RowIndex].Cells[2].ReadOnly = true;
        }
于 2015-01-16T12:36:12.893 回答