8
votes

Pourquoi mon kinkbutton ne sera-t-il pas à l'intérieur d'une grille d'entre eux élever son événement OnClick?

J'ai un linkbutton dans une grille de grille (via un modèlefield). Peu importe ce que j'essaye, le Linkbutton n'invoque pas son gestionnaire d'événements. J'ai essayé les deux:

  1. Un gestionnaire d'événements traditionnel ("OnClick") LI>
  2. Un gestionnaire d'événements ONROWCOMMAND au niveau GridView. LI> ol>

    Dans les deux cas, j'ai débogué et cela n'atteignez même pas le gestionnaire d'événements. P>

    Si je déplace le linkboutton sur la page (donc ce n'est pas dans la grille) , ça marche bien, alors je sais que la syntaxe est correcte. P>

    Voici la méthode "traditionnelle": p> xxx pré>

    Qu'est-ce qui est intéressant si je supporte le La méthode "CancelThis" du code derrière, elle jette une erreur. Donc, je sais que c'est au courant de son gestionnaire d'événements, car il le cherche quand il compile. P>

    Voici la méthode RowCommand: P>

    OnRowCommand="GridView_RowCommand"
    


0 commentaires

3 Réponses :


0
votes

Viewstate est-il allumé sur votre grilleView? Cela m'a attrapé de nombreuses fois.


0 commentaires

10
votes

Comment pouvez-vous lier votre gridview code>? Utilisez-vous un contrôle de données de données? Si vous êtes contraignant manuellement pendant page_load code>, il est possible que, puisque la grille lie chaque aller-retour, le gestionnaire d'événements ne prend pas correctement. Si tel est le cas, vous voudrez peut-être essayer quelque chose comme: xxx pré>

pouvez-vous poster un code de liaison d'échantillon pour accéder à votre balisage? P>

Si vous vraiment Strong> Voulez-vous forcer le problème, vous pouvez vous connecter à l'événement Rowdatabound sur la grille, trouver le bouton manuellement et ajouter le gestionnaire dans le code derrière. Quelque chose comme: p>

extrait de balisupt: p> xxx pré>

code derrière: p> xxx pré>

Je ne suis pas Bien sûr, quel que soit le but du bouton, mais en supposant que c'est une ligne de suppression de ligne, vous ne voudrez peut-être pas prendre cette approche comme dans le gestionnaire d'événements, vous n'avez pas accès direct à la ligne en question, comme si vous utilisez le RowCommand code> événement. P>

Y a-t-il une raison pour laquelle vous utilisez le champ de modèle? Vs dis dire un bouton bouton code>? Si vous utilisez un Boutonfield code>, vous pouvez accrocher dans l'événement RowCommand code>. P>

extrait de balisage: p>

protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //let's assume your buttonfield is in column 1
        // (you'd know this based on your markup...)
        DataControlFieldCell cell = e.Row.Cells[1] as DataControlFieldCell;
        if(cell != null)
        {
            ButtonField field = cell.ContainingField as ButtonField;

            //based on your criteria, show or hide the button
            field.Visible = false;
            //or
            field.Visible = true;
        }
    }
}


2 commentaires

Utiliser un champ de boutonnage, y a-t-il un moyen de se cacher de manière programmée ou de le montrer? Je peux ou beaucoup pas montrer le bouton, en fonction de la valeur de l'itération actuelle. Tout ce que j'ai lu dit que je devais passer à un bouton standard dans un modèle de Templatefield. Avec ma méthode actuelle, j'utilise l'événement Rowdatabound pour examiner l'itération actuelle, trouver le bouton et le masquer potentiellement.


Je pense que cela serait certainement possible. Édité ma réponse avec un exemple de code ajouté.



-1
votes
<button onclick="window.open('<%#Eval("ReportLinks")%>', '_blank');" title='<%#Eval("ReportLinks")%>'> Link</button>

0 commentaires