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?
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());
}
Vérifiez que CurrentCell.RowIndex
n'est pas l'index de la ligne d'en-tête.
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());
}
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());
}
essaye ça
if(dataGridView1.Rows.Count > 0)
if (dataGridView1.CurrentCell.ColumnIndex == 3)
MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());