改造办法是自己写一个控件,让它继承GridView或Repeater,并实现IPageableItemContainer 接口。下面要发的是国外某高手写的代码,测试有效。具体使用的时候,要建一个类库项目,把代码编译成dll后,就可以添加到VS的工具箱里了! 一、自定义Repeater 复制代码 代码如下: using System.Web.UI; using System.Web.UI.WebControls; namespace WYJ.Web.Controls { /// <summary> /// Repeater with support for DataPager /// </summary> [ToolboxData("<{0}:DataPagerRepeater runat=server PersistentDataSource=true></{0}:DataPagerRepeater>")] public class DataPagerRepeater : Repeater,System.Web.UI.WebControls.IPageableItemContainer,INamingContainer { /// <summary> /// Number of rows to show /// </summary> public int MaximumRows { get { return ViewState["MaximumRows"] != null ? (int)ViewState["MaximumRows"] : -1; } } /// <summary> /// First row to show /// </summary> public int StartRowIndex { get { return ViewState["StartRowIndex"] != null ? (int)ViewState["StartRowIndex"] : -1; } } /// <summary> /// Total rows. When PagingInDataSource is set to true you must get the total records from the datasource (without paging) at the FetchingData event /// When PagingInDataSource is set to true you also need to set this when you load the data the first time. /// </summary> public int TotalRows { get { return ViewState["TotalRows"] != null ? (int)ViewState["TotalRows"] : -1; } set { ViewState["TotalRows"] = value; } } /// <summary> /// If repeater should store data source in view state. If false you need to get and bind data at post back. When using a connected data source this is handled by the data source. /// </summary> public bool PersistentDataSource { get { return ViewState["PersistentDataSource"] != null ? (bool)ViewState["PersistentDataSource"] : true; } set { ViewState["PersistentDataSource"] = value; } } /// <summary> /// Set to true if you want to handle paging in the data source. /// Ex if you are selecting data from the database and only select the current rows /// you must set this property to true and get and rebind data at the FetchingData event. /// If this is true you must also set the TotalRecords property at the FetchingData event. /// </summary> /// <seealso cref="FetchingData"/> /// <seealso cref="TotalRows"/> public bool PagingInDataSource { get { return ViewState["PageingInDataSource"] != null ? (bool)ViewState["PageingInDataSource"] : false; } set { ViewState["PageingInDataSource"] = value; } } /// <summary> /// Checks if you need to rebind data source at postback /// </summary> public bool NeedsDataSource { get { if (PagingInDataSource) return true; if (IsBoundUsingDataSourceID == false && !Page.IsPostBack) return true; if (IsBoundUsingDataSourceID == false && PersistentDataSource == false && Page.IsPostBack) return true; else return false; } } /// <summary> /// Loading ViewState /// </summary> /// <param name="savedState"></param> protected override void LoadViewState(object savedState) { base.LoadViewState(savedState); //if (Page.IsPostBack) //{ // if (!IsBoundUsingDataSourceID && PersistentDataSource && ViewState["DataSource"] != null) // { // this.DataSource = ViewState["DataSource"]; // this.DataBind(true); // } // if (IsBoundUsingDataSourceID) // { // this.DataBind(); // } / (编辑:甘南站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|