Hi all,
I've successfully created a casecaded radcombobox using the demo from here:
http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/multiplecomboboxes/defaultcs.aspx
I've successfully created a casecaded radcombobox using the demo from here:
http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/multiplecomboboxes/defaultcs.aspx
I'm now trying to turn this into a user control and create it dynamically. The problem is the Page_Load JS function of the user control never fires. Also whenever the Page_Load of the aspx.cs fires IsPostback is always true. Can anyone help?
User control code behind:
User control mark-up:
Page using the user control code behind:
User control code behind:
public partial class ctrlCascadedProcedureDropDown : System.Web.UI.UserControl{ public int ProcedureTypeSelectedValue { get; set; } public int ProcedureSelectedValue { get; set; } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { LoadProcedureTypes(); if (ProcedureTypeSelectedValue > 0) LoadProcedures(ProcedureTypeSelectedValue.ToString()); rcbProcedureType.SelectedValue = ProcedureTypeSelectedValue.ToString(); rcbProcedure.SelectedValue = ProcedureSelectedValue.ToString(); } else if (!Page.IsCallback) { if (rcbProcedureType != null) LoadProcedures(rcbProcedureType.SelectedValue); } } protected void rcbProcedureType_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e) { LoadProcedureTypes(); } protected void rcbProcedure_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e) { LoadProcedures(e.Text); } protected void LoadProcedureTypes() { TARNDB.OpsProcedureType opsProcedureType = new TARNDB.OpsProcedureType(); rcbProcedureType.DataSource = opsProcedureType.GetProcedureTypes().OrderBy(x => x.ProcedureType);; rcbProcedureType.DataValueField = "ID"; rcbProcedureType.DataTextField = "ProcedureType"; rcbProcedureType.DataBind(); rcbProcedureType.Items.Insert(0, new RadComboBoxItem("")); } protected void LoadProcedures(string proceduretypeid) { int _proceduretypeid; if (int.TryParse(proceduretypeid, out _proceduretypeid)) { TARNDB.OpsProcedure opsProcedure = new TARNDB.OpsProcedure(); rcbProcedure.DataSource = opsProcedure.GetProcedures(_proceduretypeid).OrderBy(x => x.ProcedureName); ; rcbProcedure.DataValueField = "ID"; rcbProcedure.DataTextField = "ProcedureName"; rcbProcedure.DataBind(); } }}User control mark-up:
<div><telerik:RadComboBox ID="rcbProcedureType" runat="server" OnClientSelectedIndexChanging="LoadProcedures" OnItemsRequested="rcbProcedureType_ItemsRequested" /><telerik:RadComboBox ID="rcbProcedure" runat="server" Width="250px" OnClientItemsRequested="ItemsLoaded" OnItemsRequested="rcbProcedure_ItemsRequested" /></div><script type="text/javascript">var rcbProcedure;var rcbProcedureType;function pageLoad() { rcbProcedure = $find("<%= rcbProcedure.ClientID %>"); rcbProcedureType = $find("<%= rcbProcedureType.ClientID %>"); alert("in");}function LoadProcedures(sender, eventArgs) { var item = eventArgs.get_item(); rcbProcedure.set_text("Loading..."); // if a procedure type is selected if (item.get_index() > 0) { // this will fire the ItemsRequested event of the // procedures combobox passing the procedureTypeID as a parameter rcbProcedure.requestItems(item.get_value(), false); } else { // the -Select a continent- item was chosen rcbProcedure.set_text(" "); rcbProcedure.clearItems(); }}function ItemsLoaded(sender, eventArgs) { if (sender.get_items().get_count() > 0) { // pre-select the first item sender.set_text(sender.get_items().getItem(0).get_text()); sender.get_items().getItem(0).highlight(); } //sender.showDropDown();}</script>Page using the user control code behind:
public partial class Operations : BasePage{ public List<DynamicControl> DynamicControls { get { return (List<DynamicControl>)Session["_DynamicControls"]; } set { Session["_DynamicControls"] = value; } } protected void Page_Init(object sender, EventArgs e) { if (!IsPostBack) { DynamicControls = null; } else { if (DynamicControls != null && DynamicControls.Count > 0) { foreach (DynamicControl control in DynamicControls) { ctrlCascadedProcedureDropDown cpd = new ctrlCascadedProcedureDropDown(); cpd.ID = control.ID; switch (control.PlaceHolder.ID) { case "phProcedure": phProcedure.Controls.Add(cpd); phProcedure.Controls.Add(new Literal() { Text = "<BR />" }); break; default: break; } } } } } protected void btnAddProcedure_Click(object sender, EventArgs e) { AddDynamicProcedureControl("Procedure", phProcedure); } private void AddDynamicProcedureControl(string name, PlaceHolder placeHolder, int procedureTypeSelectedValue = 0, int procedureSelectedValue = 0) { Control control = LoadControl("~/Controls/ctrlCascadedProcedureDropDown.ascx"); ctrlCascadedProcedureDropDown cpd = (ctrlCascadedProcedureDropDown)control; int controlCount = (DynamicControls == null ? 0 : DynamicControls.Count); string ID = string.Concat(name, controlCount.ToString()); cpd.ID = ID; cpd.ProcedureTypeSelectedValue = procedureTypeSelectedValue; cpd.ProcedureSelectedValue = procedureSelectedValue; DynamicControl dc = new DynamicControl() { ID = ID, PlaceHolder = placeHolder }; if (DynamicControls == null) DynamicControls = new List<DynamicControl>(); DynamicControls.Add(dc); placeHolder.Controls.Add(cpd); placeHolder.Controls.Add(new Literal() { Text = "<BR />" }); } private List<int> GetDynamicList(PlaceHolder placeHolder) { List<int> list = null; list = new List<int>(); foreach (Control control in placeHolder.Controls) { if (control is GenericDropDown) { int id; if (int.TryParse(((GenericDropDown)control).SelectedValue, out id) && id > 0) list.Add(id); } } return list; }}