调整 ASPxGridView 中的分页按钮自定义输出
对于 ASPxGridView,查看其本身功能,是直接读取整个数据库中的表,进行填充,然后内部计算出页数与分页按钮,对于大数据表如果一次性装载数据到内存,那就完蛋了.
我喜欢只抽取一页数据,然后绑定输出.对于如何进行数据分页,只抽取一页数据这里不做讨论!
不知道9版本的这个库,是不是也是一次性读数据的,我并不知道,因为我用的是8这个版本
我抽取一页数据后,发现输出的分页按钮,就是它内部自动计算好的结果,那只能替换这个HTML输出,便于实现自己的分页按钮!
通过分析,ASPxGridView中的分页对象为[ASPxGridViewPager],其ID为[DXBPager],这个是底部的那个按钮,对于表格顶部的是[DXTPager]
代码实现,首先定义一个对象,继承自 ASPxGridView
- public sealed partial class DataGrid2X : ASPxGridView
- {
- protected override void CreateChildControls()
- {
- base.CreateChildControls();
- ASPxGridViewPager pager = this.FindControl("DXBPager") as ASPxGridViewPager;
- if (pager != null)
- pager.SetRenderMethodDelegate(this.RenderPager2X_Control); //输出的委托
- }
- void RenderPager2X_Control(HtmlTextWriter output, Control container)
- {
- /*用新的类输出HTML*/
- ASPxGridViewPager2X apage = new ASPxGridViewPager2X(this);
- apage.AllButton.Visible = this.FilterValue.Length > 0;
- apage.EnableViewState = false;
- apage.SetPageCount_2X(/*总页数*/);
- apage.SetPageIndex_2X(/*当前页数*/);
- apage.SetItemCount_2X(/*总的记录数*/);
- apage.RenderControl(output);
- //原来考虑从WebDataControllerProvider继承,可放弃
- }
- }
ASPxGridViewPager2X是继承自DX库中的[ASPxGridViewPager]类
- public class ASPxGridViewPager2X : ASPxGridViewPager
- {
- public ASPxGridViewPager2X(DataGrid2X grid)
- : base(grid)
- {
- }
- public override int PageCount
- {
- get
- {
- return _PageCount;// base.PageCount;
- }
- }int _PageCount;
- internal void SetPageCount_2X(int p)
- {
- this._PageCount = p;
- }
- public override int PageIndex
- {
- get
- {
- return _PageIndex;// base.PageIndex;
- }
- }int _PageIndex;
- internal void SetPageIndex_2X(int p)
- {
- this._PageIndex = p;
- }
- public string JScript
- {
- get { return this.Scripts.GetPagerOnClickFunction(this.ID); }
- }
- /// <summary>
- /// 总记录数
- /// </summary>
- public override int ItemCount
- {
- get
- {
- return _ItemCount;
- }
- }int _ItemCount;
- internal void SetItemCount_2X(int itemCount)
- {
- this._ItemCount = itemCount;
- if (itemCount == 0)
- {
- this._PageIndex = 0;
- this._PageCount = 0;
- }
- }
- protected override string GetItemElementOnClick(string id)
- {
- /*以下替换成自己的JS代码*/
- string btnIDFlag = id.ToUpper();
- switch (btnIDFlag)
- {
- case "PBF":
- return "g2x_doExecPager(1,0);";
- case "PBP":
- return "g2x_doExecPager(2," + (this.PageIndex + 1).ToString() + ");";
- case "PBN":
- return "g2x_doExecPager(3," + (this.PageIndex + 1).ToString() + ");";
- case "PBL":
- return "g2x_doExecPager(4,"+ this.PageCount.ToString() +");";
- case "PBA":
- return "g2x_cancelResult();"; //"ALL"按钮,显示不过滤的记录,主要考虑查询后,取消条件,显示所有数据
- }
- if (btnIDFlag.StartsWith("PN"))
- {
- string pageIdx = btnIDFlag.Replace("PN", "");
- pageIdx = (Convert.ToInt32(pageIdx) + 1).ToString();
- return "g2x_doExecPager(5," + pageIdx + ");";// + this.Grid.ClientInstanceName + ".GotoPage(0);";
- }
- return string.Empty;
- }
- //public override DevExpress.Web.ASPxPager.SummaryProperties Summary
- //{
- // get
- // {
- // base.Summary.AllPagesText = "xx";
- // return base.Summary;
- // }
- //}
- }
浙公网安备 33010602011771号