2017-09-28 2 views
0

J'ai créé dynamiquement une colonne dans un GridView un bouton apparaisse dans chaque ligne. Et j'essaie de faire fonctionner un événement onclick.Onclick événement sur une dynamique créée ButtonField dans GridView C#

ButtonField test = new ButtonField();  
test.Text = "Details"; 
test.ButtonType = ButtonType.Button; 
test.CommandName = "test"; 
GridView1.Columns.Add(test); 

Ma base asp que tout est dynamiquement ajouté à la gridview:

<asp:GridView ID="GridView1" runat="server"> </asp:GridView> 

Ceci ajoute le bouton (s) bien je ne peux cependant pas à trouver un paramètre pour ajouter un en un clic événement sur le champ du bouton de test.

J'ai essayé:

void viewDetails_Command(Object sender, GridViewRowEventArgs e) 
    { 
     if (test.CommandName == "test") 
     { 
      ScriptManager.RegisterClientScriptBlock(this, this.GetType(),  "alertMessage", "alert('Event works')", true); 
     } 
    } 

Cela ne fonctionne pas comme je suppose que ce n'est pas lié à quoi que ce soit mais je ne peux pas voir où je lier cette fonction d'événement? Juste en utilisant un message d'alerte pour tester le fonctionne onclick!

Toute aide serait géniale!

+0

Quand créez-vous ce bouton? – hardkoded

+0

Le ButtonField est en cours d'initialisation en haut de la portée, les boutons sont ajoutés aux colonnes lors du chargement de la page. – dan6657

Répondre

0

Vous devez implémenter l'événement RowCommand.

Markup:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand"> 
</asp:GridView> 

Code de côté:

public partial class DynamicGridView : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      var test = new ButtonField(); 
      test.Text = "Details"; 
      test.ButtonType = ButtonType.Button; 
      test.CommandName = "test"; 
      GridView1.Columns.Add(test); 


      GridView1.DataSource = new[] { 
       new {Id= 1, Text = "Text 1" }, 
       new {Id= 2, Text = "Text 2" }, 
      }; 
      GridView1.DataBind(); 
     } 
    } 

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "test") 
     { 
      ScriptManager.RegisterClientScriptBlock(this, GetType(), "alertMessage", "alert('Event works')", true); 
     } 
    } 
} 
+0

En quoi est-ce différent de yours @ dan6657? – hardkoded

+0

C'était juste le OnRowCommand = "GridView1_RowCommand" et le nom e.Command je pense - Merci! – dan6657

+0

Awesome @ dan6657, je vais souligner que dans la réponse – hardkoded