I have a radlistview item. On clicking of radlistview item i am generating dynamic controls as show in the code. Since dynamically generate controls not retain across post back so recreating every time. Controls are working fine but not generating in a proper order. All controls should generate one by one on clicking of list view but those are messing around, please some one suggest me how can i resolve this?
Thanks.
What I have tried:
Markup:
<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>
Code Behind:
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);
}
}
}
The Controls should generate one by one on click of listview, but generating in a group. Textboxes are generating as one group and dropdowns are generating as one group.