数据绑定过程
DataBind 方法是所有 ASP.NET 控件公用的,对于数据绑定控件来说,它将触发用户界面的刷新以反映新数据。SqlPager 控件根据 SelectCommand 和 ConnectionString 属性的值,使用此方法启动数据检索操作。不言而喻,如果这些属性中的任何一个为空,该过程将终止。同样,如果合作者控件不存在,数据绑定过程将被取消。要查找合作者控件,DataBind 方法使用 Page 类中的 FindControl 函数。由此可见,合作者控件必须为主窗体的直接子控件。
进行分页显示的控件不能为任意的 ASP.NET 服务器控件。它必须为列表控件或基本数据列表控件。更一般来说,合作者控件必须具有 DataSource 属性并实现 DataBind 方法。可能进行分页的控件实际上只需要满足这些要求。Microsoft? .NET Framework 中所有继承 ListControl 或 BaseDataList 的控件都满足第一个要求;而所有 Web 控件通过设计都满足 DataBind 要求。使用当前的实现方法,无法使用 SqlPager 控件来对 Repeater 进行分页。Repeater 与合作者控件 DataList 和 DataGrid 不同,不继承 BaseDataList,也不提供列表控件的功能。下表列出了可以使用 SqlPager 进行分页的控件。
表 2:可以由 SqlPager 控件进行分页的数据绑定控件
| 控件 | 说明 |
| CheckBoxList | 从 ListControl 派生而来,显示为复选框列表。 |
| DropDownList | 从 ListControl 派生而来,显示为字符串下拉列表。 |
| ListBox | 从 ListControl 派生而来,显示为字符串可滚动列表。 |
| RadioButtonList | 从 ListControl 派生而来,显示为单选按钮列表。 |
| DataList | 从 BaseDataList 派生而来,显示为模板化数据项目列表。 |
| DataGrid | 从 BaseDataList 派生而来,显示为数据项目的表格网格。DataGrid 是唯一一个内置有功能强大的分页引擎的 ASP.NET 控件。 |
| public override void DataBind() { // 启动数据绑定事件 base.DataBinding(); // 数据绑定后必须重新创建控件 ChildControlsCreated = false; // 确保控件存在且为列表控件 _controlToPaginate = Page.FindControl(ControlToPaginate); if (_controlToPaginate == null) return; if (!(_controlToPaginate is BaseDataList || _controlToPaginate is ListControl)) return; // 确保具有足够的连接信息并指定查询 if (ConnectionString == "" || SelectCommand == "") return; // 获取数据 if (PagingMode == PagingMode.Cached) FetchAllData(); else FetchPageData(); // 将数据绑定到合作者控件 BaseDataList baseDataListControl = null; ListControl listControl = null; if (_controlToPaginate is BaseDataList) { baseDataListControl = (BaseDataList) _controlToPaginate; baseDataListControl.DataSource = _dataSource; baseDataListControl.DataBind(); return; } if (_controlToPaginate is ListControl) { listControl = (ListControl) _controlToPaginate; listControl.Items.Clear(); listControl.DataSource = _dataSource; listControl.DataBind(); return; } } |
http://dev.xuezhishi.net/website/NET/2007-10-17/20785.html