比较GridView,DataList,Repeator ,DetailsView,FormView

代码段1:
    protected void q_GetChildView(DataView view, ref DataView childView, int startRecord, int pageSize)
    {
        if (startRecord >= view.Count)
            return;
        else
        {
            for (int i = startRecord; (i < startRecord + pageSize) && (i<view.Count); i++)
            {
    DataRowView newRow = childView.AddNew();               
                newRow= view[i];               
            }
        }
    }

代码段2:
    protected void q_GetChildView(DataView view, ref DataView childView, int startRecord, int pageSize)
    {
        if (startRecord >= view.Count)
            return;
        else
        {
            for (int i = startRecord; (i < startRecord + pageSize) && (i<view.Count); i++)
            {
                DataRowView newRow = childView.AddNew();
                for (int j = 0; j < view.Table.Columns.Count; j++)
                {
                    newRow[j] = view[i][j];
                }
            }
        }
    }
   
参照以上代码,代码段2可以正常工作,代码段1只能产生一个空的表.在断点调试的时候可以发现代码段1中,newRow变量,的确
是被赋值成功了,但是执行完毕后发现,childView中所有的行都是空的,所以使用改进的代码段2进行实验.发觉显式的对newRow
的每一列newRow[j]赋值后,产生的childView都是正确的.思考后想到newRow是一个引用,newRow= view[i];这一句相当于
将newRow的引用指向view[i],并不是将view[i]的值复制到newRow原来指向的地方.C++用惯了,虽然知道C#中见到的大部分
都是引用,但是C++的引用乃是显式声明的,一眼就明了.但是C#的对象是显式声明,引用乃是隐式的,有时候仍然受到了蒙蔽.

本以为DataView就像Table一样,可以自己存储数据,并且编辑筛选数据.但是查看文档后发现,DataView只发挥数据筛选和
呈现的作用,其生存必须依赖于一个DataTable才可以,以前一直不明白ADO.net中3个数据对象DataSet,DataTable和DataView
的作用和关系.现在看来DataSet就是一个小小的数据库,可以内藏多个表,可以有各种关系,各种与数据库相似的属性和操作,
比如键和关系等等.而DataTable就是一个数据库中的表,呈现一个单独的数据集合.DataView主要用作筛选和呈现数据,DataView
从一个DataTable中获取数据,对数据进行筛选,排序,添加,删除等操作,最后产生一个原DataTable的子集或者超集,提供给数据
控件用于呈现.

.Net 2中5个数据源控件,GridView,DataList,Repeator ,DetailsView,FormView
其中前3个用于呈现多列数据,后面2个用于呈现单列数据,即常用的数据明细.
GridView和DetailsView控件的布局固定,自定义数据显示的布局功能有限,一般适合布局简单的数据呈现
DataList,Repeator和FormView数据控件都有很强的自定义布局能力,如果数据呈现需要较为复杂的布局方案,这3个控件是
首选

GridView ,DetailsView和FormView都是2.0版本新增控件,内置了分页,排序等等功能,其改进程度是1.1所提供控件无法比的.
DataList和Repeator是1.1版就提供的控件,内置功能较弱,需要自己实现分页,排序,数据事件等功能.

有趣的是,在现在的Aspnet平台上,如果从功能上来说呈现单列数据时DetailsView和FormView相对应,DetailsView布局固定
FormView自定义布局,呈现多列数据时只有GridView来负责布局固定的数据,从功能上来说,没有对应的控件与GridView相配.
DataList提供的数据功能与GridView相比,实在是太弱了.与GridView几乎不需要编程就能担负数据呈现的重任相比,DataList
要求程序员必须自己写代码来实现想要的功能.推测是为了与1.1兼容,所以没有升级DataList.为了赶进度,所以没有像升级
DataGrid为GridView一样升级DataList为ListView....希望以后的.Net Framework 3能够改善

在Asp.net 2上面,存在着
 GridView
 DataGrid
 DataList
 Repeater
 DetailsView
 FormView
一批数据呈现控件和
  ObjectDataSource
  XmlDataSource
  AccessDataSource
  SiteMapDataSource
  SqlDataSource
 PagedDataSource
   一批数据源控件
   在数据控件中,DataGrid已经被取代,未来将会很少出场.DataList以后可能会被升级或者被另一控件所取代.Repeator也有被
   取代的可能,不过我认为这种可能会比较小,Repeator控件是更加自由自定义数据控件,其存在就是为了开发者释放个人的灵感
   自由是其存在的价值,以后的改进只可能会向着使开发更加便利方向.所以以后的数据源控件中,最常用的数据源控件将是4个
  
   GridView --- ? ---  DetailsView --- FormView
  
   在数据源控件中,AccessDataSource是一个弱化的SqlDataSource,其本身的存在就令人怀疑,一个专用的数据源控件无法提供
   比SqlDataSource更加丰富的专用功能,反而比SqlDataSource更加弱化,当然属于被淘汰的角色,即使是开发基于Access数据库
   的Web程序,使用这个控件也是差的选择,因为SqlDataSource比它更强更好.
   SiteMapDataSource也是一个类似于AccessDataSource的控件,但是有所不同的是,这个控件的确使基于SiteMap的开发更加容易.
   未来也是有前途的控件之一.
   如同DataList数据控件一样,PagedDataSource这个数据源控件现在已经不在被提到了,因为分页功能被很多控件集成了,从1.0版
   就存在的这位前辈没有了用武之地,如今,大概唯一的用处是为像DataList这样落后的控件提供支持了
   未来3位继续有前途的数据源控件是SqlDataSource,XmlDataSource和ObjectDataSource,这3位大人物各有所长,各领一面风骚.
   真正能傲视群雄.

 ---------From http://yist.blogbus.com/logs/4644530.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值