2010-07-28 4 views
1

J'essaie de modifier la sortie de mon GridView dans le gestionnaire d'événements RowDataBound, mais cela ne fonctionne pas - rien ne se passe.Modification de la sortie html d'un gridview

Mon code:

Private Sub MyGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles MyGridView.RowDataBound 
    e.Row.Attributes.Add("data-xkoordinat", 0) 
End Sub 

Ce que j'attends à voir:

<tr data-xkoordinat="0">..</tr> 

ce qui sort

<tr>...</tr> 

Comment puis-je ajouter l'attribut?

Mise à jour:
J'ai fait des recherches un peu plus, et a remarqué qu'il n'y a rien dans la trace de la méthode RowDataBound - devrait-il y avoir? Ma routine Page_Load, où la liaison de données se produit, est comme suit:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Using db As IDatabaseAdapter = Locator.GetDatabaseAdapter() 
    db.Open() 
     MyGridView.DataSource = db.ExecuteReader("MatpunktLista", True, {db.CreateParameter("id_uppdrag", Request.QueryString("id_uppdrag"))}) 
     MyGridView.DataBind() 
    End Using 
End Sub 

Y at-il ici qui causerait les lignes à ne pas être DataBound? Je suis en train de recharger via F5 ou en sélectionnant le champ d'adresse dans mon navigateur et en tapant Entrez, donc je ne pense pas que les postbacks devraient être un problème.

+0

Mis à jour ma réponse en fonction de votre mise à jour: Je pense que vous avez oublié de déclarer l'événement rowdatabound. –

Répondre

1

Je ne sais pas pourquoi, mais maintenant travaux. Je crois que cela pourrait avoir quelque chose à voir avec le serveur qui sert les anciennes versions du code, parce que quand j'ai ajouté des commentaires de trace pour voir ce qui s'est passé, rien ne s'est montré - même après avoir compilé et rechargé.

Maintenant, tout à coup, tout fonctionne comme prévu. La seule chose que j'ai faite était de recompiler à nouveau, donc je suppose que le problème était un ancien code. Pour tous ceux qui trouvent ceci: Le code fourni dans la question devrait fonctionner - assurez-vous simplement que c'est bien le code qui est servi au navigateur ...

0

Hummm ... Cela devrait fonctionner.

choses à vérifier:

  • Comment allez-vous en train de regarder la source? Si vous utilisez un outil comme Firebug, la source affichée n'est pas vraiment la source que votre navigateur a reçue. Il peut avoir supprimé l'attribut de l'affichage car il n'existe pas en HTML "standard". Vérifiez la source avec la fonctionnalité "See html source" de votre navigateur pour vous assurer qu'il n'est pas rendu.
  • Peut-être que vous avez une bibliothèque qui édite le rendu HTML (j'ai utilisé une fois, il a généré un code HTML plus convivial CSS), il peut également avoir supprimé l'attribut inconnu.
  • Je sais qu'il est évident, mais être sûr qu'il n'y a nulle part un appel à Attributes.Clear()

Je pense à ce sujet, mais cet extrait devrait fonctionner ...
See this post, mais je ne suis pas sûr que ça aiderait.

MISE À JOUR: S'il vous plaît noter que vous devez déclarer les données de la ligne méthode liée à la déclaration que vous Gridview, il ne se produit pas automatiquement:

<asp:GridView ID="gvMyGrid" runat="server" onrowdatabound="gvMyGrid_RowDataBound"> 
... 
</asp:GridView> 
+0

J'utilisais les outils de développement (c'est-à-dire la copie firebug) dans Chrome, mais si je dis "Afficher la source", l'attribut n'est toujours pas présent. Et quand mon javascript essaie de le lire, une exception est levée. Je n'ai aucune bibliothèque qui modifie le html, et aucun appel à Attributes.Clear(). J'ai remarqué dans la trace qu'il n'y a aucune entrée pour la méthode RowDataBound, mais je ne sais pas s'il devrait y avoir. –

+0

@Votre mise à jour: Il s'avère que cela * se produit * automatiquement. Ou bien, pas automatiquement, mais vous remarquerez dans mon code que je suis en train d'accrocher le gestionnaire d'événements du côté codebehind au lieu du côté aspx. L'un ou l'autre est OK, tant que l'on est là. (Si vous faites les deux, le gestionnaire d'événements pourrait être viré deux fois, ce qui donnera parfois des résultats inattendus ...) Cependant, comme vous le voyez dans ma propre réponse, ce n'était pas non plus le problème. –

+0

Oh OK. Je n'ai pas vu la liaison. Désolé je ne suis pas habitué à la syntaxe VB. En C#, vous n'avez pas la possibilité de lier la méthode événementielle à l'événement dans la déclaration (ou je ne l'ai jamais vu). –

Questions connexes