Syf AK Ответов: 1

Динамические элементы управления не генерируются через обратную передачу.


У меня есть 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

Вам нужно использовать отладчик, чтобы выяснить, почему он не работает для выпадающего списка. Продолжайте и установите точку останова в методе, где вы воссоздаете элементы управления и шагаете в код.

1 Ответов

Рейтинг:
8

RmcbainTheThird

Любые элементы управления, созданные на лету(в коде позади), не будут существовать при обратной передаче. Вам нужно будет создать их снова.