I added a RadDropDownList to my user control and added a OnSelectedIndexChanged but when I run the project and change the dropdown index, it doesn't hit the OnSelectedIndexChanged method.
<telerik:RadDropDownList ID="RadDropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="RadDropDownList1_SelectedIndexChanged"> <Items> <telerik:DropDownListItem Text="-- ALL --" Value="0" /> <telerik:DropDownListItem Text="Test 1" Value="1" /> <telerik:DropDownListItem Text="Test 2" Value="2" /> </Items></telerik:RadDropDownList>protected void RadDropDownList1_SelectedIndexChanged(object sender, Telerik.Web.UI.DropDownListEventArgs e){ int x = -1; x = e.Index;}I put a breakpoint on the first line of the SelectedIndexChanged method and it never gets in there.
4 Answers, 1 is accepted
Clarification: I realized the event isn't firing because the user control this DropDownList is in is dynamically created in code. When I move the DropDownList out of that user control and into the one that's creating it, it works. The problem is, I need the DropDownList to work in the dynamically created user control.
I create a RadTab and RadPageView for each party in my record set. Then once the tab and page view are created, it inserts a user control with the party's information on it. The DropDownList filter's the party's information.
ucHistoryTabs.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ucHistoryTabs.ascx.cs" Inherits="ucHistoryTabs" %><div style="width: 100%; padding:0px 0px 10px 0px;"> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Label runat="server" ID="ErrorMessageLabel" Text="" Visible="false" style="font-size: x-large; color:red" /> <telerik:RadTabStrip ID="PartyTabStrip" runat="server" MultiPageID="HistorysPages" Skin="" Width="100%" ScrollChildren="true" ScrollButtonsPosition="Right"> <Tabs></Tabs> </telerik:RadTabStrip> <telerik:RadMultiPage ID="HistorysPages" runat="server" Width="95%"></telerik:RadMultiPage> </ContentTemplate> </asp:UpdatePanel></div>ucHistoryTabs.ascx.cs
public void BuildTabs(List<PartyInfo> allPartyInfos){ try { List<int> partyIDs = new List<int>(); partyIDs = allPartyInfos.Select(i => i.PartyID).Distinct().ToList(); foreach (int partyID in partyIDs) { List<PartyInfo> infoByParty = new List<PartyInfo>(); infoByParty.Clear(); infoByParty = allPartyInfos.Where(i => i.PartyID == partyID).ToList(); string partyName = string.Empty; if (infoByParty.Count > 0) partyName = infoByParty[0].PartyName; //first check to see if the tab exists before creating it. if (PartyTabStrip.Tabs.Where(t => t.Text == partyName).Count() < 1) { #region Tab Telerik.Web.UI.RadTab tab = new Telerik.Web.UI.RadTab(); tab.CssClass = "radtab-alltabs"; tab.SelectedCssClass = "radtab-selectedtab"; tab.Text = partyName; tab.Value = "p_" + partyID.ToString(); tab.PageViewID = "p_" + partyID.ToString(); PartyTabStrip.Tabs.Add(tab); #endregion #region Page Telerik.Web.UI.RadPageView page = new Telerik.Web.UI.RadPageView(); page.ID = "p_" + partyID.ToString(); if (infoByParty.Count > 0) { ucHistoryDisplay ucWHD = (ucHistoryDisplay)LoadControl("~/ucHistoryDisplay.ascx"); ucWHD.FillData(infoByParty); ucWHD.ID = "d_" + partyID.ToString(); page.Controls.Add(ucWHD); } else { System.Web.UI.WebControls.Label lbl = new System.Web.UI.WebControls.Label(); lbl.ID = "d_" + partyID.ToString(); lbl.Text = "No records found"; page.Controls.Add(lbl); } #endregion HistorysPages.PageViews.Add(page); } } if (PartyTabStrip.Tabs.Count > 0) PartyTabStrip.Tabs[0].Selected = true; if (HistorysPages.PageViews.Count > 0) HistorysPages.PageViews[0].Selected = true; } catch (Exception ex) { ThrowError(ex, "BuildTabs"); }}ucHistoryDisplay.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ucHistoryDisplay.ascx.cs" Inherits="uctHistoryDisplay" %><div style="padding-left:20px;"> <asp:Table runat="server" ID="FilterControls" Width="100%"> <asp:TableRow> <asp:TableCell>Status</asp:TableCell> <asp:TableCell> <telerik:RadDropDownList runat="server" ID="StatusDropDown" OnSelectedIndexChanged="StatusDropDown_SelectedIndexChanged" AutoPostBack="true" AppendDataBoundItems="true"> <Items> <telerik:DropDownListItem Text="-- ALL --" Selected="true" /> </Items> </telerik:RadDropDownList> </asp:TableCell> <asp:TableCell>Type</asp:TableCell> <asp:TableCell> <telerik:RadDropDownList runat="server" ID="TypeDropDown" OnSelectedIndexChanged="TypeDropDown_SelectedIndexChanged" AutoPostBack="true" AppendDataBoundItems="true"> <Items> <telerik:DropDownListItem Text="-- ALL --" Selected="true" /> </Items> </telerik:RadDropDownList> </asp:TableCell> <asp:TableCell>Number of Records</asp:TableCell> <asp:TableCell><asp:label runat="server" ID="Count" /></asp:TableCell> </asp:TableRow> </asp:Table></div><telerik:RadGrid ID="HistoryRadGV" runat="server" AutoGenerateColumns="false" ShowHeader="false" Skin="" style="padding-left: 0px; width: 100%" ItemStyle-BackColor="#FFFFFF" AlternatingItemStyle-BackColor="#F5F5F5" OnItemDataBound="HistoryRadGV_ItemDataBound"></telerik:RadGrid>ucHistoryDisplay.ascx.cs
public void FillData(List<PartyInfo> selectedInfo) { try { List<string> myStatuses = new List<string>(); myStatuses = selectedInfo.Select(w => w.Status).Distinct().OrderBy(q => q).ToList(); StatusDropDown.DataSource = myStatuses; StatusDropDown.DataBind(); List<string> myTypes = new List<string>(); myTypes = selectedInfo.Select(w => w.Type).Distinct().OrderBy(q => q).ToList(); TypeDropDown.DataSource = myTypes; TypeDropDown.DataBind(); Count.Text = selectedInfo.Count.ToString(); HistoryRadGV.DataSource = selectedInfo; HistoryRadGV.DataBind(); } catch (Exception ex) { ThrowError(ex, "FillData"); } } protected void StatusDropDown_SelectedIndexChanged(object sender, Telerik.Web.UI.DropDownListEventArgs e) {//do stuff} protected void WarrantTypeDropDown_SelectedIndexChanged(object sender, Telerik.Web.UI.DropDownListEventArgs e) {//do stuff}Presumably, because I create this user control dynamically, the SelectedIndexChanged events never fire when I change the DropDownList.
Thoughts?
I replied to the identical thread you started in the Ticketing System. If you have any further questions on this subject you can ask them there.
Regards,
Ivan Danchev
Telerik
Hi,
I know that this is an old post but I have the same problem.
what was the solution??
If Jeremy doesn't get a chance to respond and provide details, here is a short summary of the private thread (I cannot go into too much details as it is private) - the issue was coming from the dynamic control generation. The key point was that the controls had to be re-created with the correct IDs (the same with each postback) and to ensure that there is only one control with one ID and the .Clear() method of a Controls collection could be used to remove prior duplicates in case the control createion logic needs to run twice on the same page lifecycle.
Regards,
Marin Bratanov
Progress Telerik
