Create Dynamic Dropdownlist Controls and related event

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

    Create Dynamic Dropdownlist Controls and related event

    Create Dynamic Dropdownlist Controls and related event
    --------------------------------------------------------------------------------

    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._SearchByArraySelectedInd  exChanged);
                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.Substrin  g(((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(((Bu  tton)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);
                    }
            }
     
     
        }
    }
Working...