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位大人物各有所长,各领一面风骚.
真正能傲视群雄.