using System;
using System.Data;
using System.Configuration;
using System.Collections.Specialized;
using System.Web;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Collections;
using System.Drawing.Design;
namespace HlxControl
{
[ParseChildren(true)
,PersistChildren(false)]
public class DoubleListCheck : WebControl, IPostBackDataHandler
{
private ArrayList arrSelectedValue;
private ArrayList arrAvailableValue;
//------------------------------------------------------------------------------------
// C L I E N T I N S T A N C E N A M E
//
[Bindable(true)
,Category("Appearance")]
public string ClientInstanceName
{
get
{
string strValue = (string)ViewState["ClientInstanceName"];
string strResult;
set
{
ViewState["ClientInstanceName"] = value;
}
}
//------------------------------------------------------------------------------------
// A V A I L A B L E V A L U E
//
[Bindable(true)
,Category("Data")
,Description("List of available values")
,Editor(typeof(DoubleListCheckEditor), typeof(UITypeEditor))
,PersistenceMode(PersistenceMode.InnerProperty)]
public ArrayList AvailableValue
{
get
{
if (arrAvailableValue == null)
arrAvailableValue = new ArrayList();
return arrAvailableValue;
}
}
//------------------------------------------------------------------------------------
// S E L E C T E D V A L U E
//
[Bindable(true)
,Category("Data")
,Description("List of selected values")
,Editor(typeof(DoubleListCheckEditor), typeof(UITypeEditor))
,PersistenceMode(PersistenceMode.InnerProperty)]
public ArrayList SelectedValue
{
get
{
if (arrSelectedValue == null)
arrSelectedValue = new ArrayList();
return arrSelectedValue;
}
}
//------------------------------------------------------------------------------------
// C R E A T E C H I L D C O N T R O L S
//
// Override the CreateChildControls method to
// add child controls to the Employees property when this
// custom control is requested from a page.
protected override void CreateChildControls()
{
base.CreateChildControls();
Controls.Clear();
CreateControlHierarchy();
ClearChildViewState();
}
//------------------------------------------------------------------------------------
// A D D A V A I L A B L E I T E M
//
public void AddAvailableItem(string strDescription, string strID, string strValue)
{
DoubleListCheckItem oItem = new DoubleListCheckItem(strID, strDescription, strValue);
arrAvailableValue.Add(oItem);
}
//------------------------------------------------------------------------------------
// A D D S E L E C T E D I T E M
//
public void AddSelectedItem(string strDescription, string strID, string strValue)
{
DoubleListCheckItem oItem = new DoubleListCheckItem(strID, strDescription, strValue);
arrSelectedValue.Add(oItem);
}
//------------------------------------------------------------------------------------
// A D D R O W
//
private string AddRow(string strDescription, string strID, string strValue)
{
string strHTML = string.Empty;
//------------------------------------------------------------------------------------
// R E N D E R
//
protected string renderHtml()
{
// INITIALIZE
if (ClientInstanceName == string.Empty)
ClientInstanceName = this.ID + "_js";
//---------------------------------------------------------------------------------------------------
// C R E A T E C O N T R O L H I E R A R C H Y
//
/// <summary>
///
/// </summary>
protected virtual void CreateControlHierarchy()
{
/* oTextbox = new TextBox();
oTextbox.Text = Text;
this.Controls.Add(oTextbox);
oLabel = new Label();
oLabel.Text = Title;
this.Controls.Add(oLabel);*/
// Register a helper hidden field
Page.ClientScript.RegisterHiddenField(ID, "");
}
protected override void AddParsedSubObject(object o)
{
int i;
i = 0;
}
//protected override Type
}
}
Sébastien D’Errico
Web Development Consultant
Mobile : (438) 882-8687
Email : sebastien@hollox.net
I'm afraid that you haven't kept the ArrayList into something like ViewState or Session, Because of this, everytime when you do a postBack and the control is re-created and all the data lost.
Plz check your CreateChildrenControls or something like this else.
sderrico
Member
15 Points
13 Posts
Collection disappear
Oct 25, 2011 07:38 PM|LINK
Hello Everyone,
I have the same problem as this poster:
http://forums.asp.net/t/1731492.aspx/1?Problems+rendering+controls+collection+at+design+time
I am able to fill value with the collection editor in the form editor but I does not show at run time. Do I forget to implement a function?
I will attach the code of 3 classes in the next posts.
Also, I post the code here: http://www.hollox.net/a/HlxControl.zip
Thank you,
Have a great day!
Sébastien
Web Development Consultant
Mobile : (438) 882-8687
Email : sebastien@hollox.net
sderrico
Member
15 Points
13 Posts
Re: Collection disappear
Oct 25, 2011 07:38 PM|LINK
File: DoubleListCheck.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections.Specialized;
using System.Web;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Collections;
using System.Drawing.Design;
namespace HlxControl
{
[ParseChildren(true)
,PersistChildren(false)]
public class DoubleListCheck : WebControl, IPostBackDataHandler
{
private ArrayList arrSelectedValue;
private ArrayList arrAvailableValue;
//------------------------------------------------------------------------------------
// C L I E N T I N S T A N C E N A M E
//
[Bindable(true)
,Category("Appearance")]
public string ClientInstanceName
{
get
{
string strValue = (string)ViewState["ClientInstanceName"];
string strResult;
if (strValue != null)
strResult = strValue;
else
strResult = string.Empty;
return strResult;
}
set
{
ViewState["ClientInstanceName"] = value;
}
}
//------------------------------------------------------------------------------------
// A V A I L A B L E V A L U E
//
[Bindable(true)
,Category("Data")
,Description("List of available values")
,Editor(typeof(DoubleListCheckEditor), typeof(UITypeEditor))
,PersistenceMode(PersistenceMode.InnerProperty)]
public ArrayList AvailableValue
{
get
{
if (arrAvailableValue == null)
arrAvailableValue = new ArrayList();
return arrAvailableValue;
}
}
//------------------------------------------------------------------------------------
// S E L E C T E D V A L U E
//
[Bindable(true)
,Category("Data")
,Description("List of selected values")
,Editor(typeof(DoubleListCheckEditor), typeof(UITypeEditor))
,PersistenceMode(PersistenceMode.InnerProperty)]
public ArrayList SelectedValue
{
get
{
if (arrSelectedValue == null)
arrSelectedValue = new ArrayList();
return arrSelectedValue;
}
}
//------------------------------------------------------------------------------------
// C R E A T E C H I L D C O N T R O L S
//
// Override the CreateChildControls method to
// add child controls to the Employees property when this
// custom control is requested from a page.
protected override void CreateChildControls()
{
base.CreateChildControls();
Controls.Clear();
CreateControlHierarchy();
ClearChildViewState();
}
//------------------------------------------------------------------------------------
// A D D A V A I L A B L E I T E M
//
public void AddAvailableItem(string strDescription, string strID, string strValue)
{
DoubleListCheckItem oItem = new DoubleListCheckItem(strID, strDescription, strValue);
arrAvailableValue.Add(oItem);
}
//------------------------------------------------------------------------------------
// A D D S E L E C T E D I T E M
//
public void AddSelectedItem(string strDescription, string strID, string strValue)
{
DoubleListCheckItem oItem = new DoubleListCheckItem(strID, strDescription, strValue);
arrSelectedValue.Add(oItem);
}
//------------------------------------------------------------------------------------
// A D D R O W
//
private string AddRow(string strDescription, string strID, string strValue)
{
string strHTML = string.Empty;
strHTML += "<tr class=\"jsDoubleListCheck_row\">";
strHTML += " <td><input type=\"checkbox\" /></td>";
strHTML += " <td>" + strDescription + "</td>";
strHTML += " <td><input type=\"text\" size=\"4\" maxlength=\"4\" value=\"" + strValue + "\"/></td>";
strHTML += " <td><input type=\"hidden\" value=\"" + strID + "\" /></td>";
strHTML += "</tr>";
return strHTML;
}
//------------------------------------------------------------------------------------
// R E N D E R
//
protected string renderHtml()
{
// INITIALIZE
if (ClientInstanceName == string.Empty)
ClientInstanceName = this.ID + "_js";
string m_ID = ClientInstanceName;
string strHTML = string.Empty;
// OPEN OBJECT
strHTML += "<div class=\"jsDoubleListCheck_frame\">";
// OPEN ROW DATA
strHTML += "<div class=\"jsDoubleListCheck_row\">";
// COLUMN SELECTED
strHTML += " <div class=\"jsDoubleListCheck_column\">";
strHTML += " <table id=\"" + m_ID + "_table_selected\" class=\"jsDoubleListCheck_table jsDoubleListCheck_column_selected\">";
foreach (DoubleListCheckItem oItem in SelectedValue)
strHTML += AddRow(oItem.Description, oItem.Value, "");
strHTML += " </table>";
strHTML += " </div>";
// COLUMN AVAILABLE
strHTML += " <div class=\"jsDoubleListCheck_column\">";
strHTML += " <table id=\"" + m_ID + "_table_available\" class=\"jsDoubleListCheck_table jsDoubleListCheck_column_available\">";
foreach (DoubleListCheckItem oItem in AvailableValue)
strHTML += AddRow(oItem.Description, oItem.Value, "");
strHTML += " </table>";
strHTML += " </div>";
// CLOSE ROW DATA
strHTML += "</div>";
// OPEN ROW BUTTON
strHTML += "<div class=\"jsDoubleListCheck_row\">";
// MOVE TO RIGHT
strHTML += " <div class=\"jsDoubleListCheck_column\">";
strHTML += " <input class=\"jsDoubleListCheck_button\" type=\"button\" value=\"Remove\" onclick=\"" + m_ID + ".moveRow('selected', 'available')\" />";
strHTML += " </div>";
// MOVE TO LEFT
strHTML += " <div class=\"jsDoubleListCheck_column\">";
strHTML += " <input class=\"jsDoubleListCheck_button\" type=\"button\" value=\"Add\" onclick=\"" + m_ID + ".moveRow('available', 'selected')\" />";
strHTML += " </div>";
// CLOSE ROW BUTTON
strHTML += "</div>";
// START - DATA
strHTML += "<div class=\"jsDoubleListCheck_row\">";
strHTML += "<input style=\"visibility: hidden;\" id=\"" + m_ID + "_data\" type=\"text\" />";
strHTML += "</div>";
// END - DATA
// CLOSE OBJECT
strHTML += "</div>";
// JAVASCRIPT
strHTML += "<script language=\"javascript\" type=\"text/javascript\">";
strHTML += "// COMPONENT INITIALIZATION";
strHTML += "\nvar " + m_ID + " = new jsDoubleListCheck('" + m_ID + "');";
strHTML += "</script>";
// RETURN
return strHTML;
}
protected override void Render(HtmlTextWriter writer)
{
writer.Write(renderHtml());
/*
TextBox oTextbox1;
writer.AddAttribute("border", "1");
writer.AddAttribute("cellpadding", "0");
writer.AddAttribute("cellspacing", "0");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
// Label
writer.RenderBeginTag(HtmlTextWriterTag.Td);
oLabel.RenderControl(writer);
writer.RenderEndTag(); //Td
// Textbox
writer.RenderBeginTag(HtmlTextWriterTag.Td);
oTextbox.RenderControl(writer);
writer.RenderEndTag(); //Td
writer.RenderEndTag(); //Tr
foreach (DoubleListCheckItem oItem in SelectedValue)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
oTextbox1 = new TextBox();
oTextbox1.Text = oItem.Description;
oTextbox1.RenderControl(writer);
writer.RenderEndTag(); //Td
writer.RenderEndTag(); //Tr
}
writer.RenderEndTag(); //Table
//RenderContents(writer);*/
}
protected override void OnInit(EventArgs e)
{
arrSelectedValue = new ArrayList();
arrAvailableValue = new ArrayList();
base.OnInit(e);
EnsureChildControls();
}
bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postValues)
{
string postedValue = string.Empty;
/* if (postValues[oTextbox.UniqueID] != null)
postedValue = postValues[oTextbox.UniqueID].ToString();
if (postedValue != Text)
{
Text = postedValue;
return true;
}*/
return false;
}
void IPostBackDataHandler.RaisePostDataChangedEvent()
{
}
//---------------------------------------------------------------------------------------------------
// C R E A T E C O N T R O L H I E R A R C H Y
//
/// <summary>
///
/// </summary>
protected virtual void CreateControlHierarchy()
{
/* oTextbox = new TextBox();
oTextbox.Text = Text;
this.Controls.Add(oTextbox);
oLabel = new Label();
oLabel.Text = Title;
this.Controls.Add(oLabel);*/
// Register a helper hidden field
Page.ClientScript.RegisterHiddenField(ID, "");
}
protected override void AddParsedSubObject(object o)
{
int i;
i = 0;
}
//protected override Type
}
}
Web Development Consultant
Mobile : (438) 882-8687
Email : sebastien@hollox.net
TimoYang
Contributor
3732 Points
1275 Posts
Re: Collection disappear
Oct 27, 2011 02:23 AM|LINK
Hi——
I'm afraid that you haven't kept the ArrayList into something like ViewState or Session, Because of this, everytime when you do a postBack and the control is re-created and all the data lost.
Plz check your CreateChildrenControls or something like this else.
Decker Dong ...
All-Star
118619 Points
18779 Posts
Re: Collection disappear
Oct 27, 2011 08:28 AM|LINK
Hello:)
protected override void OnInit(EventArgs e)
{
arrSelectedValue = new
ArrayList();
arrAvailableValue = new ArrayList();
base.OnInit(e);
EnsureChildControls();
}
In runtime the arrAvailableValue
will be assigned before this event handler and thus the assigned value is lost
by the code he added. so
Please remove the two bold statements and have a try:)
sderrico
Member
15 Points
13 Posts
Re: Collection disappear
Oct 27, 2011 11:40 AM|LINK
Hello TimoYang and DeckerDong!
Thank you for your answers!
I implemented serialize on DoubleCheckItem (TimoYang)
I removed the code from the OnInit (DeckerDong).
Then I created a subcontrol so there is one collection that is managed per control as instructed on this blog:
www.west-wind.com/weblog/posts/2004/Jan/14/Collection-properties-in-ASPNet-Server-Controls-Building-a-TabStrip-Control
Thank you!
Sébastien
Web Development Consultant
Mobile : (438) 882-8687
Email : sebastien@hollox.net