Reputation: 625
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
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
Reputation: 2458
try this
if(dataGridView1.Rows.Count > 0)
if (dataGridView1.CurrentCell.ColumnIndex == 3)
MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
Upvotes: 0
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
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
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
Reputation: 20638
Check that CurrentCell.RowIndex
isn't the header row index.
Upvotes: 2