Как исправить порядок динамически генерируемых элементов управления
У меня есть элемент radlistview. При нажатии на элемент radlistview я генерирую динамические элементы управления, как показано в коде. Так как динамически генерируемые элементы управления не сохраняются по всей почте обратно, поэтому воссоздаются каждый раз. Элементы управления работают нормально, но не генерируются в надлежащем порядке. Все элементы управления должны генерироваться один за другим при нажатии на вид списка, но они путаются, пожалуйста, кто-нибудь подскажет мне, как я могу решить эту проблему?
Спасибо.
Что я уже пробовал:
Разметка:
<div id="divListView" style="overflow: auto; width: 100%;" class="sortable"> <telerik:RadListView ID="RadListView1" runat="server" RenderMode="Lightweight" DataKeyNames="Label" ClientDataKeyNames="Label" ItemPlaceholderID="ListViewPlaceHolder1"> <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%"> </td> </tr> </table> </div> </div> </ItemTemplate> </telerik:RadListView> <asp:Table ID="Table1" runat="server" EnableViewState="false"></asp:Table>
с фоновым кодом:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { RadListView1.DataSource = GetDatatable(); RadListView1.DataBind(); } else { RecreateControls("rtb", "RadTextBox"); RecreateControls("rcb", "RadComboBox"); } } public DataTable GetDatatable() { DataTable dt = new DataTable(); dt.Columns.Add("Label"); dt.Rows.Add("RadTextBox"); dt.Rows.Add("RadComboBox"); 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 "RadComboBox": int cnt2 = FindOccurence("rcb") + 1; DynamicControls dcComboBox = new DynamicControls(); TableCell combolblRad = dcComboBox.Controlscreation("RadLabel", "", cnt2, cnt2, "Combo box:", "", 0); TableCell comboRad = dcComboBox.Controlscreation("RadComboBox", "", cnt2, cnt2, "", "", 0); TableRow comboRow = new TableRow(); comboRow.Cells.Add(combolblRad); comboRow.Cells.Add(comboRad); Table1.Rows.Add(comboRow); 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 == "RadComboBox") { DynamicControls dcComboBox = new DynamicControls(); TableCell combolblRad = dcComboBox.Controlscreation("RadLabel", "", k, k, "Combo box:", "", 0); TableCell comboRad = dcComboBox.Controlscreation("RadComboBox", "", k, k, "", "", 0); TableRow comboRow = new TableRow(); comboRow.Cells.Add(combolblRad); comboRow.Cells.Add(comboRad); Table1.Rows.Add(comboRow); } } } } } } private int FindOccurence(string substr) { string reqstr = Request.Form.ToString(); return ((reqstr.Length - reqstr.Replace(substr, "").Length) / substr.Length); } } }
Элементы управления должны генерироваться один за другим по щелчку listview, но генерироваться в группе. Текстовые поля генерируются как одна группа, а выпадающие списки генерируются как одна группа.
BillWoodruff
Если вы купили этот программный пакет стоимостью более 1000 долларов США, подумайте о том, чтобы воспользоваться форумами поддержки Telerik.