引言
在进行新闻内容页绑定的时候遇到了一些问题(本来认为在整合的时候是比较简单的,但是现实总是很残酷的,以前都是一个功能一个功能的实现,都是直接调用每一层的方法,这次都是分层来编写的,在看着文档整合的时候都是眼泪啊.....不是方法名写的不正确就是参数写的少字母,哎。。。。。),但是这个问题还是比较陌生的,同样也是思想中一些固有的东西导致在调错的时候走错了方向。下面来看详情:
错误重现
错误分析
当遇到这个问题的时候没有任何想法(可能是第一次遇到),看了看错误解析以后发现是有一个参数是空置,所以开始了我的漫漫调错过程,第一个想到的就是参数没有传进去,所以就走了一遍代码发现参数是有的,然后发现只要是在数据库中有相应的数据就会出现这个错误,当数据库中没有数据的时候就不会出现这个错误。所以断定是控件绑定的错误,也可能是没有返回数据。但是经过单步调试后发现后有数据返回,所以就剩下了控件绑定的可能。
所以我就新建了一个窗体,在窗体上重新添加了一个repeater控件,但是还是不能显示数据,非常的郁闷,没有办法啊!!在这时候我有用了我们非常数据的数据承载控件——gridview,这时奇迹出现了,能顺利的显示数据。所以我把错误的范围定在前台的代码编写的地方,因为之前一直认为没有错误的前台,所以就没有用断点调试,现在缩小了范围后,终于找到了错误的地方:
就是因为这个地方没有填写内容,所以就引发了这个错误!其实这是个很小的错误,但是因为之前我们总是在使用gridview这个控件——在显示数据的时候直接绑定datatable类型的数据就可以,所以在调试这个错误的时候找错了方向。所以大家在接触新的知识的时候一定要寻找和旧知识的不同,不能用旧思想来学习新的知识。
几种控件的对比
在看了这么久的错误分析以后,我在解决了思想方面的东西以后,还在网上查了一些资料对于ASP.NET中几种和数据显示有关的控件的区别,给大家作为一个知识储备,等到用的的时候可以来看看
1.GridView控件
这个控件可以以表格形式(table标签)显示、编辑和删除多种不同的数据源(例如数据库、XML文件以及集合等)中的数据。GridView控件功能非常强大,如果需要,编程者可以不用编写任何代码,通过VS 2008拖拽,并从属性面板设置属性即可,还可以完成如分页、排序、外观设置等功能。虽然功能非常齐全,但程序性能将受到影响,在页面中最好不要过多地使用该控件。当然,如果需要自定义格式显示各种数据,GridView控件也提供了用于编辑格式的模板功能。
2.DataList控件
该控件可以以自定义的格式(不一定用table标签)显示各种数据源的字段,其显示数据的格式在创建的模板中定义,可以为项、交替项、选定项和编辑项创建模板。DataList控件也可以使用标题、脚注和分隔符模板自定义整体外观,还可以一行显示多个数据行。虽然DataList控件拥有很大的灵活性,但其本身不支持数据分页,编程者需要通过自己编写方法完成分页的功能。
3.DetailsView控件
DetailsView控件以表格形式(table标签)一次仅显示数据源的单条记录,并且table标签下的每行(tr标签)表示记录中的一个字段。这个控件同样支持数据的编辑、插入和删除操作,并可以轻松地设置分页功能,但是DetailsView控件本身不支持数据排序。
4.FormView控件
与DetailsView控件类似,FormView控件仅可显示数据源中的单条记录。和DetailsView控件不同,DetailsView控件采用表格布局(table标签),记录的每个字段都各自显示为一行。而FormView控件没有用于显示记录的预置布局,编程者需要自己创建子项模板,编写各种用于显示记录中的字段的控件以及布局用的其他HTML标签。和DetailsView控件一样,FormView控件可以轻松地启用分页功能。如果仅仅显示单条记录,FormView控件是比较推荐的方法,因为可以在高效开发的同时自定义数据显示的格式。
5.Repeater控件
在ListView控件出现之前,这是笔者比较常用的控件,因为Repeater 控件是一个数据绑定容器控件,用于生成各个子项的列表,这些子项的显示方式可以完全由编程者自己编写。当控件所在页面运行时,该控件根据数据源中数据行的数量重复模板中所定义的数据显示格式,编程者可以完全把握数据的显示布局,如使用div元素、ul元素等。
注意:Repeater控件仅提供重复模板内容功能,不提供如分页、排序、编辑等功能,这些功能需要编程者自己编写方法实现。
6.ListView控件
ListView控件会按照编程者编写的模板格式显示数据。与DataList和Repeater控件相似,ListView控件也适用于任何具有重复结构的数据。不过,ListView控件提供了用户编辑、插入和删除数据等数据操作功能,还提供了对数据进行排序和分页的功能,只需要在VS 2008中直接设置即可,不需要编写代码,这点非常类似于GridView控件。可以说,ListView既有Repeater控件的开放式模板,又具有GridView控件的编辑特性。
说明:ListView控件是ASP.NET 3.5新增的控件,其分页功能需要配合DataPager控件实现。