2011-02-24 3 views
0

J'essaie d'afficher des info-bulles pour chaque case dans ma checkbox. J'ai besoin que la description provienne de la base de données. La description est assez longue et j'obtiens un System.IndexOutOfRangeException. Est-ce que quelqu'un sait comment réparer ceci? S'il vous plaît aider!System.IndexOutOfRangeException

int i = 0; 
foreach (ListItem l in this.agile_factors.Items) { 
    while (dr.Read()) 
    { 
     string description = dr["Description"].ToString(); 
     l.Attributes["title"] = description; 

    } 
    i++; 
} 
conn.Close(); 
+2

sur quelle ligne obtenez-vous l'exception? – Jeff

+0

où obtenez-vous l'exception. J'ai le sentiment qu'on manque un code essentiel ... – rene

+0

Idem aux 2 commentaires ci-dessus. Savez-vous aussi que je serai toujours égal à agile_factors.Items.Size. –

Répondre

0

Cela ne va tout simplement pas fonctionner.

1) votre boucle while lira l'intégralité du lecteur de données à la première itération de la boucle foreach. l.Attributes["title"] pour le premier listitem seulement sera égal à la valeur du dernier enregistrement, alors vous devriez obtenir une erreur de lire un lecteur de données après sa fin sur l'itération suivante foreach. Bien que je ne pense pas que ce soit "indice hors de portée".

2) L'index hors gamme peut être dû au fait que le lecteur de données n'a pas de colonne avec l'un des noms que vous utilisez. Allumer le débogueur devrait l'effacer assez rapidement.

1

Est-ce aussi simple que de vérifier l'existence de la colonne avant d'essayer de l'utiliser?

foreach (ListItem l in this.agile_factors.Items) { 
    while (dr.Read()) 
    { 
     if (dr["Description"] != null) 
     { 
      string description = dr["Description"].ToString(); 
      l.Attributes["title"] = description; 
     } 
    } 
    i++; 
} 
Questions connexes