Stonep123
Stonep123

Reputation: 625

datagridview cell click event

I have an event for a cell click in a datagrid view to display the data in the clicked cell in a message box. I have it set to where it only works for a certain column and only if there is data in the cell

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.CurrentCell.ColumnIndex.Equals(3))
        if (dataGridView1.CurrentCell != null && dataGridView1.CurrentCell.Value != null)
            MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
}

however, whenever i click any of the column headers, a blank messagebox shows up. I cant figure out why, any tips?

Upvotes: 9

Views: 106091

Answers (6)

Ozlem
Ozlem

Reputation: 1

  private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.CurrentCell.ColumnIndex.Equals(0))
            {
                foreach (DataGridViewRow row in dataGridView1.SelectedRows)
                {
                 enter code here
                }
            }
         }

Upvotes: 0

Ramgy Borja
Ramgy Borja

Reputation: 2458

try this

        if(dataGridView1.Rows.Count > 0)
            if (dataGridView1.CurrentCell.ColumnIndex == 3)
                MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());

Upvotes: 0

Peter Bulyaki
Peter Bulyaki

Reputation: 329

The accepted solution throws an "object not set to an instance of an object" exception as null reference checking MUST happen before checking the actual value of a variable.

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{    
    if (dataGridView1.CurrentCell == null ||
        dataGridView1.CurrentCell.Value == null ||
        e.RowIndex == -1) return;
    if (dataGridView1.CurrentCell.ColumnIndex.Equals(3))
        MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
}

Upvotes: 1

spajce
spajce

Reputation: 7092

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{    
    if (e.RowIndex == -1) return; //check if row index is not selected
        if (dataGridView1.CurrentCell.ColumnIndex.Equals(3))
            if (dataGridView1.CurrentCell != null && dataGridView1.CurrentCell.Value != null)
                MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
}

Upvotes: 2

Saurabh R S
Saurabh R S

Reputation: 3177

You will also need to check the cell clicked is not the column header cell. Like this:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.CurrentCell.ColumnIndex.Equals(3) && e.RowIndex != -1){
        if (dataGridView1.CurrentCell != null && dataGridView1.CurrentCell.Value != null)
            MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());   
}

Upvotes: 28

Steve Wellens
Steve Wellens

Reputation: 20638

Check that CurrentCell.RowIndex isn't the header row index.

Upvotes: 2

Related Questions