Saifulla AK Ответов: 0

Как исправить порядок динамически генерируемых элементов управления


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

0 Ответов