关于ListItem的下集
下面就是一个扩展的CheckBox:
[DefaultProperty("Text")]
[ToolboxData("<{0}:XCheckBox runat=/"server/" />")]
public class XCheckBox : CheckBox
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Value
{
get
{
String s = (String)ViewState["Value"];
// updated @07-05-13
return String.IsNullOrEmpty(s) ? "on" : s;
//return ((s == null) ? String.Empty : s);
}
set
{
// 将值存储在 ViewState 中
ViewState["Value"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
base.RenderContents(output);
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
// 添加 value 属性标记(在客户端呈现),并设置对应 Value属性值(服务器端)
writer.AddAttribute(HtmlTextWriterAttribute.Value, Value);
base.AddAttributesToRender(writer);
}
}
使用以上方法用重写来扩展控件,确能实现Attribute的值不丢失.
但我们也可以换个角度去处理这个问题,比如果最近很火的xml来
实现.
ListItem li = new ListItem();
XmlDocument xd = new XmlDocument();
xd.LoadXml("<data></data>");
XmlElement xe = xd.CreateElement("detail");
xe.SetAttribute("type", tnode.TreeNodeSrc);
xe.SetAttribute("id", tnode.ID);
xe.SetAttribute("name", tnode.Text);
xd.DocumentElement.AppendChild(xe);
li.Text = tnode.Text;
li.Value = xd.InnerXml;
lstSelect.Items.Add(li);
用xml来作为参数传递,可以很好解决在以前传参时磁到的一些问题.
主程序更加的灵活,现在sql2005也有啦xml数据类型.