web-dev-qa-db-ja.com

datagridviewセルクリックイベント

データグリッドビューでセルをクリックして、クリックしたセルのデータをメッセージボックスに表示するイベントがあります。特定の列でのみ機能し、セルにデータがある場合にのみ機能するように設定しています

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

ただし、列ヘッダーのいずれかをクリックすると、空白のメッセージボックスが表示されます。理由がわかりません、ヒントはありますか?

7
Stonep123

クリックしたセルが列ヘッダーセルではないことも確認する必要があります。このような:

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());   
}
23
Saurabh R S

それを確認します CurrentCell.RowIndexはヘッダー行のインデックスではありません。

2
Steve Wellens

受け入れられたソリューションは、変数の実際の値をチェックする前に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());
}
1
Peter Bulyaki
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());
}
1
spajce

これを試して

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