Динамические элементы управления не генерируются через обратную передачу.
У меня есть radlistview по щелчку элементов представления списка, которые я создаю динамические элементы управления. В настоящее время у меня есть два элемента управления текстовое поле и выпадающее меню. Управление текстовым полем отлично работает при каждом щелчке списка, но выпадающий список генерируется только один раз. При каждом щелчке я хочу сгенерировать элемент управления, но не могу этого сделать. Может ли кто-нибудь подсказать мне, что я сделал не так в своем коде?
Что я уже пробовал:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { RadListView1.DataSource = GetDatatable(); RadListView1.DataBind(); } else { RecreateControls("rtb", "RadTextBox"); RecreateControls("rddl", "RadDropDownList"); } } public DataTable GetDatatable() { DataTable dt = new DataTable(); dt.Columns.Add("Label"); dt.Rows.Add("RadTextBox"); dt.Rows.Add("RadDropDownList"); return dt; } protected void RadAjaxManager1_AjaxRequest(object sender, Telerik.Web.UI.AjaxRequestEventArgs e) { string commandText = e.Argument.ToString().Trim(); string[] splitdata = commandText.Split('&'); commandText = splitdata[0]; string controlName = splitdata[1]; switch (controlName) { case "RadTextBox": int cnt1 = FindOccurence("rtb") + 1; DynamicControls dcTextBox = new DynamicControls(); TableCell txtlblRad = dcTextBox.Controlscreation("RadLabel", "", cnt1, cnt1, "Text Box:", "", 0); TableCell txtRad = dcTextBox.Controlscreation("RadTextBox", "", cnt1, cnt1, "", "", 0); TableRow txtRow = new TableRow(); txtRow.Cells.Add(txtlblRad); txtRow.Cells.Add(txtRad); Table1.Rows.Add(txtRow); break; case "RadDropDownList": int cnt4 = FindOccurence("rddl") + 1; DynamicControls dcRadDropDown = new DynamicControls(); TableCell radDropDownlbl = dcRadDropDown.Controlscreation("RadLabel", "", cnt4, cnt4, "RDDL:", "", 0); TableCell radDropDown = dcRadDropDown.Controlscreation("RadDropDownList", "", cnt4, cnt4, "", "", 0); TableRow dropdownRow = new TableRow(); dropdownRow.Cells.Add(radDropDownlbl); dropdownRow.Cells.Add(radDropDown); Table1.Rows.Add(dropdownRow); break; } } private void RecreateControls(string ctrlPrefix, string ctrlType) { string[] ctrls = Request.Form.ToString().Split('&'); int cnt = FindOccurence(ctrlPrefix); if (cnt > 0) { for (int k = 1; k <= cnt; k++) { for (int i = 0; i < ctrls.Length; i++) { if (ctrls[i].Contains(ctrlPrefix + "_" + k.ToString())) { if (ctrlType == "RadTextBox") { DynamicControls dcTextBox = new DynamicControls(); TableCell txtlblRad = dcTextBox.Controlscreation("RadLabel", "", k, k, "TextBox:", "", 0); TableCell txtRad = dcTextBox.Controlscreation("RadTextBox", "", k, k, "", "", 0); TableRow txtRow = new TableRow(); txtRow.Cells.Add(txtlblRad); txtRow.Cells.Add(txtRad); Table1.Rows.Add(txtRow); } if (ctrlType == "RadDropDownList") { DynamicControls dcRadDropDown = new DynamicControls(); TableCell radDropDownlbl = dcRadDropDown.Controlscreation("RadLabel", "", k, k, "RDDL :", "", 0); TableCell radDropDown = dcRadDropDown.Controlscreation("RadDropDownList", "", k, k, "", "", 0); TableRow dropdownRow = new TableRow(); dropdownRow.Cells.Add(radDropDownlbl); dropdownRow.Cells.Add(radDropDown); Table1.Rows.Add(dropdownRow); } break; } } } } } private int FindOccurence(string substr) { string reqstr = Request.Form.ToString(); return (((reqstr.Length - reqstr.Replace(substr, "").Length) / substr.Length) / 2); }
Разметка:
<telerik:RadListView ID="RadListView1" runat="server" RenderMode="Lightweight" DataKeyNames="Label" ClientDataKeyNames="Label" ItemPlaceholderID="ListViewPlaceHolder1" EnableViewState="false" Width="50%"> <EmptyDataTemplate> </EmptyDataTemplate> <LayoutTemplate> <div class="RadListView RadListView_Silk"> <table id="orgcharttable" class="layoutTable" width="100%"> <tr> <td colspan="3" class="nopadding"> <asp:PlaceHolder ID="ListViewPlaceHolder1" runat="server"></asp:PlaceHolder> </td> </tr> </table> </div> </LayoutTemplate> <ItemTemplate> <div id="divHighlight" class="ListViewStyle" onclick="SelectControl(this,event);"> <div style="vertical-align: top; width: 100%"> <table> <tr id="tr1"> <td colspan="2" class="tdnormal"> <telerik:RadLabel ID="lbl1" runat="server" Text='<%# Bind("Label")%>' Font-Bold="true" CssClass="ItemHeaderStyle"></telerik:RadLabel> </td> </tr> <tr id="tr2"> <td rowspan="2" colspan="1" style="width: 5%"> <telerik:RadBinaryImage ID="rbimgWizard" runat="server" Width="80px" Height="80px" ResizeMode="Fit" CssClass="image" ImageUrl="../../Images/SCREEN.png" /> </td> </tr> </table> </ItemTemplate> </telerik:RadListView> <asp:UpdatePanel ID="Panel1" runat="server" UpdateMode="Conditional" EnableViewState="false"> <ContentTemplate> <asp:UpdatePanel ID="Panel2" runat="server" UpdateMode="Conditional" EnableViewState="false"> <ContentTemplate> <asp:Table ID="Table1" runat="server"></asp:Table> </ContentTemplate> </asp:UpdatePanel> </ContentTemplate> </asp:UpdatePanel>
Vincent Maverick Durano
Вам нужно использовать отладчик, чтобы выяснить, почему он не работает для выпадающего списка. Продолжайте и установите точку останова в методе, где вы воссоздаете элементы управления и шагаете в код.