2009-12-14 6 views
1

Soirée tous.Info-bulle dans gridview en utilisant la méthode de dictionnaire

J'ai le code suivant que j'ai besoin d'examiner - fondamentalement je m'attache aux pailles ici. J'ai un gridview auquel je voudrais assigner des info-bulles.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Header) 
     { 
      foreach (TableCell cell in e.Row.Cells) 
      { 
       foreach (System.Web.UI.Control ctl in cell.Controls) 
       { 
        if (ctl.GetType().ToString().Contains("DataControlLinkButton")) 
        { 
         Dictionary<String, String> headerTooltips = new Dictionary<String, String>(); 
         headerTooltips["Product ID"] = "A unique product ID"; 
         headerTooltips["Product Description"] = "Description of product"; 

         String headerText = cell.Text; 
         cell.Attributes.Add("title", headerTooltips[headerText]); 

        } 
       } 
      } 
     } 

    } 

Essentiellement ce que je suis en train de réaliser est un outil de pointe qui apparaît par chaque tête de colonne (c.-à-ID de produit et description du produit.)

Cependant, lorsque j'utilise le code ci-dessus, je reçois les éléments suivants Message d'erreur "La clé donnée n'était pas présente dans le dictionnaire." Cela apparaît sur la ligne

cell.Attributes.Add("title", headerTooltips[headerText]); 

.

Quelqu'un peut-il signaler l'erreur dans mes habitudes? Merci pour toute aide ou suggestion.

+0

Vous dites que vous voulez afficher les info-bulles sur la ligne d'en-tête, mais votre code suggère que vous allez utiliser les info-bulles pour afficher les détails de ce produit, etc. Donc, si un correspond de produits spécifiques à la ligne d'en-tête, quelles sont les données contenues dans les lignes réelles de la grille? Êtes-vous sûr de ne pas vouloir d'info-bulles sur les cellules des lignes de données plutôt que sur l'en-tête? –

+0

Bonjour Anders - pas vraiment les info-bulles sur la ligne d'en-tête. J'ai utilisé l'ID de produit et la description comme exemples, en réalité ils seraient codés ce qui signifierait peu pour l'utilisateur et donc je voudrais assigner une pointe d'outil à chacun des en-têtes de colonnes pour expliquer ce qu'est réellement ce titre ... la confusion. C'est probablement juste un très mauvais code que j'ai essayé de m'adapter à ma façon novice. Si vous pouvez penser à une alternative pour réaliser cette tâche, s'il vous plaît faites le moi savoir! – MrDean

Répondre

1

L'erreur est due au fait que vous n'avez pas ajouté d'entrée à votre dictionnaire correspondant à la valeur de cell.Text. Les seules clés que votre dictionnaire contient sont 'ID produit' et 'Description du produit', donc à moins que vous n'ayez des cellules qui contiennent réellement ce texte, il échouera toujours. Vous pouvez le faire:

if (headerTooltips.ContainsKey(headerText)) 
{ 
    cell.Attributes.Add("title", headerTooltips[headerText]); 
} 

qui vous amène au-delà de l'exception, mais ne pense pas que ce soit ce que vous essayez d'accomplir.

Edit:

Voulez-vous que le cell.Text apparaisse comme l'info-bulle? Si oui, alors faites ceci:

// This is only replacing the foreach part, the rest of your code is still valid 
foreach (System.Web.UI.Control ctl in cell.Controls) 
{ 
    if (ctl.GetType().ToString().Contains("DataControlLinkButton")) 
    { 
     cell.Attributes.Add("title", cell.Text); 
    } 
} 
+0

Bonjour Cory, merci pour la suggestion. Je l'ai essayé avec l'ID du produit (en remplacement du titre) et le même message apparaît. Ne vous inquiétez pas trop, merci de votre contribution. – MrDean

Questions connexes