Dynamic Controls in asp.net

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Nilla2010
    New Member
    • Sep 2010
    • 14

    #1

    Dynamic Controls in asp.net

    I am having some issues in dynamically created controls. My scenario is when the user selects a dropdown values, it should dynamically create image buttons, where URL is from database. Then when the user click’s any one of the image, it should create the same image in the placeholder. The problem is when I give the on click event in the code behind its not working and I know it has to be initialized in Page init, but since the creation is based on Selectedindexch ange, I don’t know how to proceed further. When I click the image, the page is post back and the images are gone. Please see my below code


    Code:
    protected void Selectedindex_loadObjTemp(object sender, System.EventArgs e)
    {
        
        PlaceHolder PlaceHolder1 = new PlaceHolder();
    
          // Get the number of labels to create.
         String objTyoe = ddlObjTemp.SelectedValue;
         String strSQl = "select * from ObjectTemplates where type=" +    objTyoe;
         DataTable dt = FillDataTable(strSQl);
         Table addTable = new Table();   
        
         addTable.Controls.Clear();
         if (dt.Rows.Count > 0)
         {
            
            int datavount = 0;
             for (int i = 0; i <= datavount; i++)
                 {
                     TableRow newRow = new TableRow();                  
                     
                     for (int j = 0; j <= 3; j++)
                     {
                         TableCell newcell = new TableCell();
                         System.Web.UI.WebControls.ImageButton myImage = new System.Web.UI.WebControls.ImageButton();
                         myImage.ID = "imgv" + dt.Rows[datavount]["id"];
                         myImage.Attributes.Add("runat", "server");
                         switch (objTyoe)
                         {
                             case "1":
                                 myImage.ImageUrl = "~/Images/streets/" + dt.Rows[datavount]["fileName"];
                                 break;
                             case "2":
                                 myImage.ImageUrl = "~/Images/Street Templates/" + dt.Rows[datavount]["fileName"];
    
                                 break;
                             case "5":
                                 myImage.ImageUrl = "~/Images/vehicles/" + dt.Rows[datavount]["fileName"];
                                 break;
                             case "6":
                                 myImage.ImageUrl = "~/Images/signs/" + dt.Rows[datavount]["fileName"];
    
                                 break;
                             case "7":
                                 myImage.ImageUrl = "~/Images/animals/" + dt.Rows[datavount]["fileName"];
    
                                 break;
                             case "8":
                                 myImage.ImageUrl = "~/Images/labels/" + dt.Rows[datavount]["fileName"];
                                 break;
                             case "99":
                                 myImage.ImageUrl = "~/Images/other/" + dt.Rows[datavount]["fileName"];
    
                                 break;
    
                             case "9":
                                 myImage.ImageUrl = "~/Images/ghosts/" + dt.Rows[datavount]["fileName"];
    
                                 break;
                         }
    
      
                         Panel newpanel = new Panel();
                         newpanel.Controls.Add(myImage);
                         newcell.Controls.Add(newpanel);
                         myImage.Click += new System.Web.UI.ImageClickEventHandler(
    this.btnCreate_Click);
                        
                         datavount++;
                         newRow.Cells.Add(newcell);
                         if (datavount >= dt.Rows.Count)
                             break;
                     }
                     if (datavount >= dt.Rows.Count)
                         break;
                     addTable.Rows.Add(newRow);
                    
                 }
             mainPanel.Controls.Add(addTable);
    
    }
    }
    private void btnCreate_Click(object sender, EventArgs e)
    {
        showmsg(sender.ToString() + e.ToString());
    
    }
    Thanks
    Last edited by Frinavale; Sep 16 '10, 03:55 PM. Reason: In the future, please post code in [code] ... [/code] tags. Added code tags.
  • Frinavale
    Recognized Expert Expert
    • Oct 2006
    • 9749

    #2
    Store the number of image buttons created in a HiddenField. A HiddenField can be accessed in the Page Init event (using Request.Params( "idOfHiddenFiel d") to retrieve it). That way you can re-create the image buttons in the correct place, the Page Init event. Also be sure to specify the method that handles the image button click event in the Page Init event.

    -Frinny

    Comment

    • Nilla2010
      New Member
      • Sep 2010
      • 14

      #3
      Frinny ,
      Thanks for your reply.Hiddenfil ed didn't worked for and i used session variable and able to create in page_init.

      Thanks again.

      Comment

      • Frinavale
        Recognized Expert Expert
        • Oct 2006
        • 9749

        #4
        Session works too :)
        It's a little trickier using the hidden field but I've got it to work in the past.

        Glad you got it to work.

        -Frinny

        Comment

        Working...