由于之前一直在从事管理的工作,比较长一段时间没有写Asp.net的页面展现和控制逻辑了,今天准备赶一个开发进度时候,在需要使用数据绑定控件和XmlDataSource控件时遇到了一点小问题。由于当前的XmlDataSource控件的数据源不能直接通过指定文件的形式来绑定,所以考虑在后台通过动态绑定来实现。结果没有想到一个小功能尽然弄了快2个小时,汗!~以下是我遇到的问题,做个记录:
项目中需要做一个页面的列表展现,于是我就直接使用了一个ListView控件作为数据绑定控件,在提供的数据行中有一个字段在数据库中是Xml类型的字段,这个字段存储着一个内部的子结构。 在列表展现的时候需要把这个子结构也一起按某种约定的样式呈现出来。于是我就考虑了在ListView的模板列中嵌套了一个Repeater控件,用来呈现这个子结构;并且考虑这个数据源是Xml结构的,因此我想到需要使用一个XmlDataSource控件来做辅助解析。结果问题就来了。首先在页面上我给Repeater控件的DataSourceId指定为XmlDataSource的控件Id,而XmlDataSource的数据通过在后台ListView控件的ItemDataBound事件来动态指定。结果一测试发现竟然抛出“未将对象引用设置到对象的实例”错误,通过异常信息发现在XmlDataSource控件加载Xml数据的时候出错了,为什么会这样呢?最后发现如果在页面中给数据绑定控件(如Repeater等)指定了DataSourceId,而XmlDataSource定数据是在这个数据绑定控件的ItemDataBound事件中动态指定的就会发生这个异常。于是我就把页面中的DataSourceId指定去掉了;换成在ItemDataBound事件中给XmlDataSource赋完Data属性后再指定控件的DataSourceId属性。调试运行一下没有异常了,但好像数据出不来,怎么回事呢?可能是Xml的XPath写的不对,仔仔细细查看了许多遍都没有发现自己写错了呀!靠!!!难道碰到鬼了。MD死马就当活马医了,不会是在这个Repeater控件上还要调用DataBind方法,反正试试总不会损失什么的,结果一试竟然可以显示了。册那~问题终于解决了。