データグリッドビューでセルをクリックして、クリックしたセルのデータをメッセージボックスに表示するイベントがあります。特定の列でのみ機能し、セルにデータがある場合にのみ機能するように設定しています
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());
}
ただし、列ヘッダーのいずれかをクリックすると、空白のメッセージボックスが表示されます。理由がわかりません、ヒントはありますか?
クリックしたセルが列ヘッダーセルではないことも確認する必要があります。このような:
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());
}
それを確認します CurrentCell.RowIndex
はヘッダー行のインデックスではありません。
受け入れられたソリューションは、変数の実際の値をチェックする前にnull参照チェックが発生する必要があるため、「オブジェクトがオブジェクトのインスタンスに設定されていません」例外をスローします。
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());
}
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());
}
これを試して
if(dataGridView1.Rows.Count > 0)
if (dataGridView1.CurrentCell.ColumnIndex == 3)
MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());