代码改变世界

ASP.NET 2.0 中的 DataSource 系列控件

  Cat Chen  阅读(1018)  评论(6编辑  收藏  举报

在ASP.NET 2.0中,引入了DataSource系列控件,扔一个到页面上并且选择性的配置好SELECT/UPDATE/INSERT/DELETE对应的操作,它就能够和数据空间无缝合作自动处理查询与更新,并且提供分页、排序等支持。

有一些ASP.NET 1.x的程序员,并不喜欢使用DataSource控件,觉得还是按找1.x的写法在Page_Load里面设定数据控件的DataSource属性然后执行DataBind好,但实际上2.0的数据控件为DataSource控件做了不少优化所以应该尽量使用DataSource控件。我在使用2.0的过程中DataSource控件和手动DataBind都尝试过了,并且借助Reflector分析.NET自带控件的代码,发现了其中的一些差异。

首先要说的是,数据控件对于是否使用DataSource控件是非常敏感的,很多操作数据控件都会检查自己的DataSourceID属性是否为空,如果不为空则很多事情都能够配合DataSource控件自动化完成,如果为空则通过事件通知用户需要手动完成一些操作。

例如GridView的分页,在使用DataSource控件的时候是能够自动运作的,在翻页时GridView会自动将PageIndex设置为GridViewPageEventArgs.NewPageIndex,同时设置RequiresDataBinding为true,接下来的事情就如魔术般自动发生——GridView会重新执行DataBind,这时候它会懂得自己去找DataSource控件获取DataSourceView,然后从DataSourceView中获取本页数据并进入创建子控件环节。如果你提供给DataSource控件的SELECT方法本身就支持通过传递参数选择仅获取某一页的数据,那么DataSource控件就懂得仅获取GridView所需页的数据以及总页数。

但如果没有DataSource控件,只是指定DataSource并且DataBind,那就会提示GridView未设置OnPageIndexChanging事件,其实意思就是你必须自己手动处理这个事件。对于DataSource从来都是整个GridView显示的数据这种情况来说,自己添加一个OnPageIndexChanging事件并在其中手动更改PageIndex属性和重新DataBind就可以解决问题了。但如果你想优化SELECT方法为仅获取当前页的数据,那就没办法了,因为你无法手动设置GridView的PageCount属性。

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示