ASP.NET控件开发基础(19)
http://tech.ddvip.com 2007年09月02日 社区交流
内容摘要:上两篇讨论了基本数据绑定控件的实现步骤,基本上我们按着步骤来就可以做出简单的数据绑定控件了。过年前在看DataGrid的实现,本来想写这个的,但2.0出了GridView了,再说表格控件实现比较复杂,所以先放着。我们一起打开MSDN来看点别的,当然主题还是离不开数据绑定控件。
2.4实现IPostBackDataHandler,当选中时,postCollection[postDataKey]为"on"
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
int checkbox = -1;
try
{
string id = postDataKey.Substring(ClientID.Length + 1);
if (Char.IsDigit(id[0]))
checkbox = Int32.Parse(id, CultureInfo.InvariantCulture);
}
catch
{
return false;
}
if (checkbox == -1)
return false;
string val = postCollection[postDataKey];
bool ischecked = val == "on";
ListItem item = Items[checkbox];
if (item.Selected != ischecked)
{
item.Selected = ischecked;
return true;
}
return false;
}
到这里实现的就差不多了,BulletedList的实现就不再写了。总之控件在不同生命周期完成了不同的事,一步一步的下来就成就了一个控件。
在模板控件中使用的注意点:
记得我以前在用radiobuttonlist时,遇到过一个问题.我想在一个表格中实现一个很简单的效果,如下图

刚开始我以为很简单,把radiobutton放在Repeater里面,radiobutton的GroupName是跟着ID变的。
却忘了服务器控件进了Repeater模板里面其ID属性就会重命名,这带来了很多的不便。于是我想用radiobuttonlist,radiobuttonlist呈现后则为一个表格,不够灵活,我就不得不重写其布局。
更讨厌的是由于radiobutton需要Text属性,其不同于DropDownList(其实DropDownList和ListBox才算的上是名副其实的列表控件),所以无法将input作为父标签,为了共享WebControl成员,只得多加个span标签,其重写了最后呈现如下
<span style="color:Red;"><input id="RadioButton1" type="radio" name="RadioButton1" value="RadioButton1" /><label for="RadioButton1">测试</label></span>
虽然2.0中添加了InputAttributes和LabelAttributes集合属性,但name属性已经定死了。或者就是再添加一个重复的name属性,或者就是再重新写一个?这个算不算是缺点? 感觉用起来就是不顺心。
感觉越到下面问题越多了,如果有错误还请指出。这次主要学习下如何自定义列表控件,接着打算开始记录下2.0新增的数据源控件如何实现。
责编:豆豆技术应用
- asp.net 视频教程
- asp.net 数据库编程
- asp.net 入门教程
- ado.net 教程
- asp.net 基础讲座
- asp.net ajax 教程
- asp.net ajax 入门系列
- asp.net 控件开发基础
- asp.net 2.0 服务器控件
- asp.net 2.0 教程
- asp.net 控件开发
- asp.net 类
- asp.net 分页
- asp.net 页面缓存
- asp.net 常见问题解决
- asp.net 2.0 母版页
- asp.net SQL Server
- asp.net 错误
- asp.net 事件
- asp.net 组件
- asp.net 性能
- asp.net 文件上传
- 更多asp.net专题……