web-dev-qa-db-fra.com

événement de clic de cellule datagridview

J'ai un événement pour une cellule, cliquez dans une vue de la grille de données pour afficher les données de la cellule sur laquelle vous avez cliqué dans une boîte de message. Je l'ai réglé à l'endroit où il ne fonctionne que pour une certaine colonne et uniquement s'il y a des données dans la cellule

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

cependant, chaque fois que je clique sur l'un des en-têtes de colonne, une boîte de message vide apparaît. Je ne peux pas comprendre pourquoi, des conseils?

6
Stonep123

Vous devrez également vérifier que la cellule sur laquelle vous avez cliqué n'est pas la cellule d'en-tête de colonne. Comme ça: 

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

Vérifiez que CurrentCell.RowIndex n'est pas l'index de la ligne d'en-tête.

2
Steve Wellens

La solution acceptée lève une exception "objet non défini à une instance d'objet", car la vérification de la référence nulle DOIT avoir lieu avant la vérification de la valeur réelle d'une 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());
}
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

essaye ça

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