Martina
Martina

Reputation: 811

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

I have a DataGridView and I want in my grid a column having some cells that display a button and some cells that do not contain the button. In order to solve this problem I've added a DataGridViewButtonColumn and I've written this method that I call to add the rows to my column:

 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;
     }
 }

The problem is that when I set the cell value to null I receive an exception. How can I display some of these cells without the button inside? Thank you

Upvotes: 0

Views: 306

Answers (2)

TaW
TaW

Reputation: 54453

Looks like the GetNewRow() returns the Row you are talking about already inserted in the DGV.

If that function has the knowledge if the 'Info' Column shall contain a Button, it can pass it, maybe in the Tag:

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

Then you can write:

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

If otoh the code that calls AttachNewRow() has the required knowledge, it could instead pass it on in a parameter:

private void AttachNewRow(bool infoButton)

If the knowlegde is available only later you can still change individual cells.

Update:

since you are now passing the condition into the method you can act accordingly.

I don't know why you get an exception in your code - I don't. But to really hide the Button you should change the cell to be a 'normal' DataGridViewTextBoxCell:

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

Upvotes: 2

danish
danish

Reputation: 5600

You could try something like this in RowAdded event handler. Here it is assumed that third column is button column:

if (condition)
        {

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

Upvotes: 1

Related Questions