Create Dynamic Dropdownlist Controls and related event - ASP.NET

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • MaryamSh
    New Member
    • Mar 2008
    • 2

    Create Dynamic Dropdownlist Controls and related event - ASP.NET

    Hi,
    I am creating a Dynamic Search in my application.
    I create a user control and in Page_load event I create a dynamic dropdownlist and 2 dynamic button (Add,Remove)
    By pressing Add button ,another row will be created with the same control (I mean another dropdown and 2 button) and so on.
    and by pressing Remove button the selecetd row will be removed.

    I used viewstate to keep my value for postback,

    I want by changing selectedvalue of dropdownlist ,create another dynamic dropdown and textbox. so far my code is working but when I click "Add" button to create another row ,I lost my second dropdownlist and textbox.

    I don not know where should I fire my SelectedValue event,to keep all control on form ,by each postback I have all my control except controls that are created by selectedvalecha nge event

    Here is all my code.

    any idea???

    Code:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using AjaxControlToolkit;
    namespace LangleySunWorx.Controls
    {
        public partial class WorkOrderSearch : System.Web.UI.UserControl
        {
            int number = 1;
            int j = 0;
            DropDownList[] _SearchByArray = new DropDownList[20]; //SearchBy Dropdown List
            DropDownList[] _FilterByArray = new DropDownList[20]; //FilterBy DropDown List
    
            DropDownList[] _DdlValueArray = new DropDownList[20]; //for fields which are drop and selected from SearchBy
            TextBox[] _TxtValueArray = new TextBox[20];//for fields which are text and selected from SearchBy
            TextBox[] _TxtDateValueArray = new TextBox[20];//for fields which are Date and selected from SearchBy
            Image[] _ImgBtnCalendarArray = new Image[20];//Image for fields which are Date and selected from SearchBy
            CalendarExtender[] _CalendarExtenderArray = new CalendarExtender[20];
            DropDownExtender[] _DropDownExtenderArray = new DropDownExtender[20];
            Button[] _BtnAddArray = new Button[20];
            Button[] _BtnRemoveArray = new Button[20];
    
    
    
            public string [] SearchByText= new string[] { 
                    "Txt_Order#","Cmb_Job#", "Cmb_Status", "Dat_Date Created","Dat_Date Required",
                    "Dat_Date Started","Dat_Date Completed","Txt_Pole#","Txt_House#","Txt_Location",
                    "Txt_Priority","Txt_Parent Order#","Txt_System User","Txt_Originator","Cmb_Originator Type",
                    "Txt_Originator Name","Cmb_Problem Code","Cmb_Billing Rate","Cmb_City Area","Txt_Map Reference",
                    "Txt_Occurence#","Cmb_Request Locates","Cmb_Request Permits","Cmb_Restoration","Cmb_Police Services" };
    
            public string[] SearchByValue= new string[] { 
                    "WorkorderID","JobID", "StatusID", "DateCreated","DateRequired",
                    "DateStarted","DateCompleted","PoleNumber","HouseNumber","Location",
                    "PriorityID","ParentWorkOrderID","SystemUserID","OriginatorID","OriginatorType",
                    "OriginatorName","ProblemCodeID","BillingRateID","CityArea","MapReference",
                    "OccurenceNumber","flagRequestLocates","flagRequestPermits","flagIsRestoration","flagPoliceServices" };
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    InsertComponet(number);
                    ViewState.Add("Counter", number);
                }
            }
    
    
            protected void InsertComponet(int Index)
            {
                InsertRow(Index);
                FillSearchBy(Index);
                _SearchByArraySelectedIndexChanged(_SearchByArray[Index], EventArgs.Empty);
                FillFilterBy(Index);
                FillAddRemoveButton(Index);
                ViewState["controlsadded"] = true;
                ViewState["Counter"] = Index;
    
            }
            protected void InsertRow(int RowNumber)
            {
                HtmlTableRow tRow = new HtmlTableRow();
                HtmlTableCell[] _CellArray = new HtmlTableCell[6];
    
                for (int i = 0; i <= 5; i++)
                {
                    _CellArray[i] = new HtmlTableCell();
    
                }
    
                tRow.Height = "50";
                tRow.VAlign = "Middle";
                Table11.Rows.Insert(RowNumber, tRow);
                Table11.Rows[RowNumber].Cells.Insert(0, _CellArray[0]);
                Table11.Rows[RowNumber].Cells.Insert(1, _CellArray[1]);
                //Table11.Rows[RowNumber].Cells[1].InnerText = "Search By ";
                Table11.Rows[RowNumber].Cells.Insert(2, _CellArray[2]);
                //Table11.Rows[RowNumber].Cells[2].InnerText = "Filter By ";
                Table11.Rows[RowNumber].Cells.Insert(3, _CellArray[3]);
                Table11.Rows[RowNumber].Cells.Insert(4, _CellArray[4]);
                Table11.Rows[RowNumber].Cells.Insert(5, _CellArray[5]);
    
            }
            protected void DeleteRow(int RowNumber)
            {
                HtmlTableRow tRow = new HtmlTableRow();
                Table11.Rows.RemoveAt(RowNumber);
     
            }
            protected void FillSearchBy(int Index)
            {
                _SearchByArray[Index] = new DropDownList();
                _SearchByArray[Index].ID = "_SearchByArray" + Convert.ToString(Index);
                _SearchByArray[Index].Width = 150;
                _SearchByArray[Index].AutoPostBack = true;
                _SearchByArray[Index].Items.Clear();
                for (int i = 0; i <= SearchByText.Length - 1; i++)
                {
                    _SearchByArray[Index].Items.Add(new ListItem(SearchByText[i].Substring(4), SearchByValue[i]));
                }
                _SearchByArray[Index].SelectedIndexChanged += new System.EventHandler(this._SearchByArraySelectedIndexChanged);
                Table11.Rows[Index].Cells[1].Controls.Add(_SearchByArray[Index]);
    
                //_DropDownExtenderArray[Index] = new AjaxControlToolkit.DropDownExtender();
                //_DropDownExtenderArray[Index].ID = "_DropDownExtenderArray" + Convert.ToString(Index); ;
                //_DropDownExtenderArray[Index].TargetControlID = "_SearchByArray" + Convert.ToString(Index);
                //Table11.Rows[Index].Cells[1].Controls.Add(_DropDownExtenderArray[Index]);
      
    
            }
            protected void FillFilterBy(int Index)
            {
                _FilterByArray[Index] = new DropDownList();
                _FilterByArray[Index].ID = "_FilterByArray" + Convert.ToString(Index);
                _FilterByArray[Index].Width = 150;
                _FilterByArray[Index].AutoPostBack = true;
                _FilterByArray[Index].Items.Clear();
                Table11.Rows[Index].Cells[2].Controls.Add(_FilterByArray[Index]);
            }
            protected void FillAddRemoveButton(int Index)
            {
                _BtnAddArray[Index] = new Button();
                _BtnAddArray[Index].ID = "_BtnAddArray" + Convert.ToString(Index);
                _BtnAddArray[Index].CssClass = "button";
                _BtnAddArray[Index].Text = "ADD";
                _BtnAddArray[Index].Width = 60;
                _BtnAddArray[Index].Click += new System.EventHandler(this._BtnADDClickHandler);
    
                Table11.Rows[Index].Cells[4].Controls.Add(_BtnAddArray[Index]);
    
                _BtnRemoveArray[Index] = new Button();
                _BtnRemoveArray[Index].ID = "_BtnRemoveArray" + Convert.ToString(Index);
                _BtnRemoveArray[Index].Text = "Remove";
                _BtnRemoveArray[Index].Width = 60;
                _BtnRemoveArray[Index].CssClass = "button";
                _BtnRemoveArray[Index].Click += new System.EventHandler(this._BtnRemoveClickHandler);
                Table11.Rows[Index].Cells[4].Controls.Add(_BtnRemoveArray[Index]);
    
    
            }
    
            //Dynamic Events
            protected void _SearchByArraySelectedIndexChanged(object sender, EventArgs e)
            {
                int SelectedItem = 0;
                SelectedItem = Convert.ToInt32(((DropDownList)sender).ID.Substring(((DropDownList)sender).ID.Length - 1, 1));
    
                switch (SearchByText[((DropDownList)sender).SelectedIndex].Substring(0, 3))
                {
                    case "Txt":
                        _TxtValueArray[SelectedItem] = new TextBox();
                        _TxtValueArray[SelectedItem].ID = "_TxtValueArray" + Convert.ToString(SelectedItem);
                        _TxtValueArray[SelectedItem].Text = SearchByText[((DropDownList)sender).SelectedIndex].Substring(4);
                        _TxtValueArray[SelectedItem].Width = 150;
                        Table11.Rows[SelectedItem].Cells[3].Controls.Add(_TxtValueArray[SelectedItem]);
                        break;
                    case "Cmb":
                        _DdlValueArray[SelectedItem] = new DropDownList();
                        _DdlValueArray[SelectedItem].ID = "_DdlValueArray" + Convert.ToString(SelectedItem);
                        _DdlValueArray[SelectedItem].Width = 150;
                        Table11.Rows[SelectedItem].Cells[3].Controls.Add(_DdlValueArray[SelectedItem]);
                        break;
                    case "Dat":
                        //Create TextBox for Date
                        _TxtDateValueArray[SelectedItem] = new TextBox();
                        _TxtDateValueArray[SelectedItem].ID = _TxtDateValueArray + Convert.ToString(SelectedItem);
                        Table11.Rows[SelectedItem].Cells[3].Controls.Add(_TxtDateValueArray[SelectedItem]);
    
                        //Create Image for Calendar Image
                        _ImgBtnCalendarArray[SelectedItem] = new Image();
                        _ImgBtnCalendarArray[SelectedItem].ID = "_ImgBtnCalendarArray" + Convert.ToString(SelectedItem);
                        _ImgBtnCalendarArray[SelectedItem].ImageUrl = "~/imgs/Calendar.ico";
                        Table11.Rows[SelectedItem].Cells[3].Controls.Add(_ImgBtnCalendarArray[SelectedItem]);
    
                        //Create CalendarExtender
                        _CalendarExtenderArray[SelectedItem] = new AjaxControlToolkit.CalendarExtender();
                        _CalendarExtenderArray[SelectedItem].ID = "_CalendarExtenderArray"+ Convert.ToString(SelectedItem);
                        _CalendarExtenderArray[SelectedItem].TargetControlID = _TxtDateValueArray + Convert.ToString(SelectedItem);
                        _CalendarExtenderArray[SelectedItem].CssClass = "RedCalendar";
                        _CalendarExtenderArray[SelectedItem].Format = "d";
                        _CalendarExtenderArray[SelectedItem].PopupButtonID = "_ImgBtnCalendarArray" + Convert.ToString(SelectedItem);
                        Table11.Rows[SelectedItem].Cells[3].Controls.Add(_CalendarExtenderArray[SelectedItem]);
                        break;
                }
                }
            public void _BtnADDClickHandler(object sender, System.EventArgs e)
            {
                number = (int)ViewState["Counter"];
                number += 1;
                InsertComponet(number);
                Label1.Text = Convert.ToString(number);
            }
    
            public void _BtnRemoveClickHandler(object sender, System.EventArgs e)
            {
                number = (int)ViewState["Counter"];
                number -= 1;
                ViewState["Counter"] = number;
    
                int SelectedItem = 0;
                SelectedItem = Convert.ToInt32(((Button)sender).ID.Substring(((Button)sender).ID.Length - 1, 1));
                DeleteRow(SelectedItem);
                Label1.Text = Convert.ToString(number);
            }
    
            
            protected override void LoadViewState(object savedState)
            {
                base.LoadViewState(savedState);
                if (ViewState["controsladded"] == null)
    
                    j =(int) ViewState["Counter"] ;
                    for (int i = 1; i <=j ; i++)
                    {
                        InsertComponet(i);
                    }
            }
    
    
        }
    }
    Last edited by jhardman; Mar 4 '08, 04:25 PM. Reason: moved to .Net forum. ASP forum is for "classic" ASP
  • DrBunchman
    Recognized Expert Contributor
    • Jan 2008
    • 979

    #2
    Hi MaryamSh,

    You've posted this question on the ASP forum which only deals with classic ASP questions. To receive help to your question you'll need to post it on the .NET forum.

    Good luck

    Dr B

    Comment

    Working...