ASP.NET控件开发基础(18)
http://tech.ddvip.com 2007年09月02日 社区交流
内容摘要:本篇继续上篇的讨论,可能大家已经在使用asp.net2.0了,DataSource属性不再使用,而是跟数据源控件搭配使用.现在讨论的绑定技术都是基于1.1版本,先熟悉一下,本质上是一样的,这样一步步的学习.对以后绝对有帮助.因为当你使用数据源控件,只需要设置一个DataSourceID,方便的同时你是否知道数据源控件帮你做了什么事情,如果你想觉的够用了,可以不用了解,但我相信你一定会有需求.
PropertyDescriptorCollection propDescCol =
typedList.GetItemProperties(null); //was (null)
如果你为DataTable创建了DataView,将调用空引用返回DataSet中的一个DataTable,其将返回一个表集合列的属性描述符,继续看下去,该到DataMember出场的时候了,DataMember可以选择数据集中的特定表,
如何不设置DataMember,将获取默认表,看下面代码片段
判断dataMember字符数给propDesc赋值#region 判断dataMember字符数给propDesc赋值
//获取属性描述符
//若不指定dataMember属性则获取默认数据成员
if ((dataMember == null) || (dataMember.Length < 1))
{
propDesc = propDescCol[0];
}
else
//尝试在属性集合中寻找数据成员
propDesc = propDescCol.Find(dataMember, true);
#endregion
if (propDesc == null)
throw new Exception("ListSource missing DataMember");
这样我们就得到了一个DataTablePropertyDescriptor属性描述符,继续
object listitem = list[0];
//获取组件属性当前值
object member = propDesc.GetValue(listitem);
if ((member == null) || !(member is IEnumerable))
throw new Exception("ListSource missing DataMember");
return (IEnumerable)member;
此处实现原理:
DataViewManager会在其DataSet中的DataTableCollection中搜索datamember的值进行匹配,看下图,做这么多事情,我们一直在转换

注GetValue用法
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(Button1);
PropertyDescriptor pd = properties.Find("Text", false);
Button b=new Button();
b.Text = "cc";
object c=pd.GetValue(b);
Response.Write(c);
//return cc
用GetValue方法获取listitem属性值,此属性跟datamember匹配,最后member得到的是一个DataView,
DataView实现了IEnumerable,现在终于可以转换了
到此为止就结束了,现在你可以成功的传入DataSet了.
可能这个类个人认为理解起来比较累,多看几遍,多调试,多把代码动动,就会理解的深刻些,本人上面也纯属经验之谈,个人认为这个比较重要,所以分出来讲,希望对大家有帮助,错误之处还请大家提出
责编:豆豆技术应用
- 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专题……