/ / Obtention de l'exception «Index hors limites» dans DataGridView lors d'un clic sur l'en-tête - c #, winforms, datagridview, indexoutofrangeexception

Obtention de l'exception «Index hors limites» dans DataGridView lors d'un clic sur l'en-tête - c #, winforms, datagridview, indexoutofrangeexception

J'utilise un DataGridView pour afficher mes données depuisune base de données SQLite. Une colonne est un répertoire pour ouvrir les fichiers PDF attribués à la ligne. Le code fonctionne mais chaque fois que je clique sur le titre de la colonne, cela me donne l’erreur:

Index était hors de portée. Doit être non négatif et moins que la taille de la collection.

En fait, chaque fois que je clique sur le texte de la colonne (juste"PDF", ou le texte de n'importe quelle autre colonne) renvoie cette erreur. Mais lorsque je clique en dehors du texte (n'importe où dans la boîte de commande), il réorganise mes colonnes, ce qui est correct. Des idées?

Le code fonctionne, ouvre le fichier PDF, mais je ne veux pas que l’utilisateur clique accidentellement sur le texte du titre et que le programme se bloque. Voici le code de la fenêtre de données pour ouvrir le fichier PDF.

  private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
{
string filename = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
if (e.ColumnIndex == 3 && File.Exists(filename))
{
Process.Start(filename);
}
}

entrer la description de l'image ici

Réponses:

3 pour la réponse № 1

Vous obtenez l’exception lorsque vous cliquez sur l’en-tête car le RowIndex est -1. Vous ne voulez pas que quelque chose se passe quand ils cliquent de toute façon sur l'en-tête, vous pouvez donc vérifier cette valeur et l'ignorer.

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == -1 || e.ColumnIndex != 3)  // ignore header row and any column
return;                                  //  that doesn"t have a file name

var filename = dataGridView1.CurrentCell.Value.ToString();

if (File.Exists(filename))
Process.Start(filename);
}

En outre, FWIW, vous n’obtenez l’exception que lorsque vous cliquez sur le texte de l’en-tête, car vous vous êtes abonné à CellContentClick (se déclenche uniquement lorsque vous cliquez sur le contenu de la cellule, tel que le texte). Je "suggère d'utiliser le CellClick event (se déclenche lorsque vous cliquez sur une partie de la cellule).