title: Fire a RowCommand event from ImageButton created dynamically inside ITemplate
body: <p>I have a dynamically created GirdView based on value of a DropDownList.
  I use the ITemplate interface to generate the fields:</p>
  
  <pre><code>public class CreateItemTemplateOrder : ITemplate
  {
       ImageButton imgbtn_up;
       ImageButton imgbtn_down;
  
       string s_imgbtn_up_name;
       string s_imgbtn_up_ImageUrl;
       string s_imgbtn_up_CommandName;
       string s_imgbtn_up_CommandArgument;
  
       public CreateItemTemplateOrder(string imgbtn_up_name, string imgbtn_up_ImageUrl, string imgbtn_up_CommandName, string imgbtn_up_CommandArgument)
       {
  
           this.s_imgbtn_up_name = imgbtn_up_name;
           this.s_imgbtn_up_ImageUrl = imgbtn_up_ImageUrl;
           this.s_imgbtn_up_CommandName = imgbtn_up_CommandName;
           this.s_imgbtn_up_CommandArgument = imgbtn_up_CommandArgument;
  
       }
  
       public void InstantiateIn(Control objContainer)
       {
           imgbtn_up = new ImageButton();
           imgbtn_up.DataBinding += new EventHandler(imgbtn_up_DataBinding);
           objContainer.Controls.Add(imgbtn_up);
       }
  
       private void imgbtn_up_DataBinding(object sender, EventArgs e)
       {
           ImageButton imgbtn_up = (ImageButton)sender;
           imgbtn_up.ID = s_imgbtn_up_name;
           imgbtn_up.ImageUrl = s_imgbtn_up_ImageUrl;
           imgbtn_up.CommandName = s_imgbtn_up_CommandName;
           imgbtn_up.CommandArgument = s_imgbtn_up_CommandArgument;
           imgbtn_up.CausesValidation = false;
       }
   }
  </code></pre>
  
  <p>Now I want to fire RowCommand From this dynamically generated column with command argument and command name bounded to this ImageButton</p>
  
  <p>the code to get this working is:</p>
  
  <pre><code> Protected void inizializza_gw_tipi(){
         TemplateField order_col = new TemplateField;
         order_col.ItemTemplate = new CreateItemTemplateOrdine("imgbtn_up", "~/imgs/Up.gif", "minus", "order");
         order_col.HeaderText = "order";
         order_col.SortExpression = "order";
  
         gw_tipi.Columns.Add(order_col);
   }
  </code></pre>
  
  <p>All this code works fine but doesn't fire RowCommand from GridView when clicked on the ImageButton</p>
  
  <p>EDIT:
  I call the procedure in SelectedIndexChanged event of a DropDownList
          ddl_tipi_SelectedIndexChanged(Object sender , System.EventArgs e)
          {
                inizializza_gw_tipi();
                gw_tipi.DataBind();
          }</p>
  
  <pre><code>    Protected Sub inizializza_gw_tipi()
         Using cn As New SqlConnection(shared_foos.connectionString)
          Using cmd As New SqlCommand("SELECT nome_tabella, nome_campo_id, nome_campo_nome, nome_campo_descrizione, has_order FROM maschere_tipi WHERE id = @id", cn)
              cmd.Parameters.AddWithValue("id", IIf(Session("sel_val") Is Nothing, "", Session("sel_val")))
              cn.Open()
              Dim rdr As SqlDataReader = cmd.ExecuteReader
              rdr.Read()
              If rdr.HasRows Then
                  Dim b_crea_controllo As Boolean = True
                  'controllo se mettere o no la colonna ordine
                  If rdr("has_order") = True Then
                      'controllo che la colonna non sia già stata inserita, 
                      'se è già stata inserita la rimuovo e la ricreo
                      For i As Integer = 0 To gw_tipi.Columns.Count - 1
                          If gw_tipi.Columns(i).HeaderText = "ordine" Then
                              'gw_tipi.Columns.Remove(gw_tipi.Columns(i))
                              b_crea_controllo = False
                          End If
                      Next
  
                      If b_crea_controllo = True Then
  
                          Dim ordine_col As New TemplateField()
                          ordine_col.ItemTemplate = New CreateItemTemplateOrdine("lbl_ordine", "ordine", "imgbtn_up", "~/imgs/Up.gif", "meno", "ordine", "imgbtn_down", "~/imgs/Down.gif", "piu", "ordine", AddressOf ImageCommand)
                          ordine_col.HeaderText = "ordine"
                          ordine_col.SortExpression = rdr("nome_campo_nome")
  
                          gw_tipi.Columns.Add(ordine_col)
  
                      End If
                  End If
  
                  b_crea_controllo = True
  
                  For i As Integer = 0 To gw_tipi.Columns.Count - 1
                      If gw_tipi.Columns(i).HeaderText = rdr("nome_campo_nome") Then
                          b_crea_controllo = False
                      End If
                  Next
  
                  If b_crea_controllo = True Then
                      Dim nome_col As New TemplateField()
                      nome_col.ItemTemplate = New CreateItemTemplateLabel("lbl_nome", rdr("nome_campo_nome"))
                      nome_col.HeaderText = rdr("nome_campo_nome")
                      nome_col.SortExpression = rdr("nome_campo_nome")
                      gw_tipi.Columns.Add(nome_col)
                  End If
  
                  b_crea_controllo = True
  
                  For i As Integer = 0 To gw_tipi.Columns.Count - 1
                      If gw_tipi.Columns(i).HeaderText = rdr("nome_campo_descrizione") Then
                          b_crea_controllo = False
                      End If
                  Next
  
                  If b_crea_controllo = True Then
                      Dim descrizione_col As New TemplateField()
                      descrizione_col.ItemTemplate = New CreateItemTemplateLabel("lbl_descrizione", rdr("nome_campo_descrizione"))
                      descrizione_col.HeaderText = rdr("nome_campo_descrizione")
                      descrizione_col.SortExpression = rdr("nome_campo_descrizione")
                      gw_tipi.Columns.Add(descrizione_col)
                  End If
  
                  Dim str_order_by As String = " ORDER BY "
                  Dim str_ordine As String = ""
  
                  If rdr("has_order") = True Then
                      str_ordine = ", ordine "
                      str_order_by &amp;= "ordine"
                  Else
                      str_order_by &amp;= rdr("nome_campo_nome")
                  End If
  
                  Dim sqlds_tipi As New SqlDataSource(shared_foos.connectionString, "SELECT " &amp; rdr("nome_campo_id") &amp; ", " &amp; rdr("nome_campo_nome") &amp; ", " &amp; rdr("nome_campo_descrizione") &amp; str_ordine &amp; " FROM " &amp; rdr("nome_tabella") &amp; str_order_by)
  
                  gw_tipi.DataSource = sqlds_tipi
  
              End If
          End Using
      End Using
  
  End Sub
  </code></pre>