自己写DataPage分页
最近项目,手写了部分代码。
这个是ascx文件
public partial class DataPage : baseUserControl
{
#region 全局参数
private int _indexPage;
[Browsable(true)]
public int IndexPage
{
get
{
if (ViewState["index"] != null)
{
_indexPage = int.Parse(ViewState["index"].ToString());
}
return _indexPage;
}
set
{
ViewState["index"] = value;
TextBoxPage.Text = value.ToString();
_indexPage = value;
}
}
private int _pageSize;
[Browsable(true)]
public int PageSize
{
get
{
if (ViewState["pagesize"] == null)
_pageSize = Convert.ToInt32(DropDownListPageSize.SelectedItem.Value);
else
{
_pageSize = Convert.ToInt32(ViewState["pagesize"].ToString());
}
DropDownListPageSize.SelectedValue = _pageSize.ToString();
return _pageSize;
}
set
{
ViewState["pagesize"] = value;
_pageSize = value;
}
}
private int _pageTotal;
[Browsable(false)]
public int PageTotal
{
get
{
if (ViewState["pagetotal"] != null)
{
_pageTotal = int.Parse(ViewState["pagetotal"].ToString());
}
return _pageTotal;
}
set
{
ViewState["pagetotal"] = value;
_pageTotal = value;
}
}
private int _pageRecords;
[Browsable(false)]
public int PageRecords
{
get
{
if (ViewState["pagerecords"] != null)
{
_pageRecords = int.Parse(ViewState["pagerecords"].ToString());
}
return _pageRecords;
}
set
{
ViewState["pagerecords"] = value;
litTotalRecord.Text = value.ToString();
_pageRecords = value;
}
}
private object _pageControl;
[Browsable(false)]
public object PageControl
{
get
{
if (_pageControl == null) _pageControl = new object();
if (PageControl is Repeater)
{
Repeater rpt = (Repeater)PageControl;
_rptControl = rpt;
}
else if (PageControl is GridView)
{
GridView gv = (GridView)PageControl;
}
return _pageControl;
}
set { _pageControl = value; }
}
private object _pageDataSource;
[Browsable(false)]
public object PageDataSource
{
get { return _pageDataSource; }
set { _pageDataSource = value; }
}
private Repeater _rptControl;
[Browsable(false)]
public Repeater RptControl
{
get
{
if (_rptControl == null) _rptControl = new Repeater();
return _rptControl;
}
set { _rptControl = value; }
}
public delegate void bindData(int pageSize, int pageIndex);
private bindData _bindDelegate;
[Browsable(false)]
public bindData BindDelegate
{
get
{
if (Session["bindDelegate"] != null)
{
_bindDelegate = new bindData((bindData)Session["bindDelegate"]);
}
return _bindDelegate;
}
set { _bindDelegate = value; }
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
LabelNumberOfPages.Text = PageTotal.ToString();
setImgButtonStatus();
}
protected void DropDownListPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
IndexPage = 1;
reBindData();
}
private void reBindData()
{
PageSize = Convert.ToInt32(DropDownListPageSize.SelectedItem.Value);
BindDelegate(PageSize, IndexPage);
int total = PageTotal;
LabelNumberOfPages.Text = PageTotal.ToString();
setImgButtonStatus();
}
protected void ImageButtonNext_Command(object sender, CommandEventArgs e)
{
if (e.CommandName == "Page" && e.CommandArgument.ToString() == "Next")
{
IndexPage = IndexPage + 1;
BindDelegate(PageSize, IndexPage);
setImgButtonStatus();
//this.Page.Response.Redirect(HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath);
}
else if (e.CommandName == "Page" && e.CommandArgument.ToString() == "Prev")
{
IndexPage = IndexPage - 1;
if (IndexPage != 0)
BindDelegate(PageSize, IndexPage);
setImgButtonStatus();
}
else if (e.CommandName == "Page" && e.CommandArgument.ToString() == "First")
{
IndexPage = 1;
BindDelegate(PageSize, IndexPage);
setImgButtonStatus();
}
else if (e.CommandName == "Page" && e.CommandArgument.ToString() == "Last")
{
IndexPage = PageTotal;
BindDelegate(PageSize, IndexPage);
setImgButtonStatus();
}
}
private void setImgButtonStatus()
{
if (IndexPage == PageTotal)
{
ImageButtonNext.Visible = false;
ImageButtonLast.Visible = false;
}
else
{
ImageButtonNext.Visible = true;
ImageButtonLast.Visible = true;
}
if (IndexPage == 1)
{
ImageButtonFirst.Visible = false;
ImageButtonPrev.Visible = false;
}
else
{
ImageButtonFirst.Visible = true;
ImageButtonPrev.Visible = true;
}
TextBoxPage.Text = IndexPage.ToString();
}
//protected void TextBoxPage_TextChanged(object sender, EventArgs e)
//{
// IndexPage = Convert.ToInt32(TextBoxPage.Text.Trim());
// reBindData();
//}
}
{
#region 全局参数
private int _indexPage;
[Browsable(true)]
public int IndexPage
{
get
{
if (ViewState["index"] != null)
{
_indexPage = int.Parse(ViewState["index"].ToString());
}
return _indexPage;
}
set
{
ViewState["index"] = value;
TextBoxPage.Text = value.ToString();
_indexPage = value;
}
}
private int _pageSize;
[Browsable(true)]
public int PageSize
{
get
{
if (ViewState["pagesize"] == null)
_pageSize = Convert.ToInt32(DropDownListPageSize.SelectedItem.Value);
else
{
_pageSize = Convert.ToInt32(ViewState["pagesize"].ToString());
}
DropDownListPageSize.SelectedValue = _pageSize.ToString();
return _pageSize;
}
set
{
ViewState["pagesize"] = value;
_pageSize = value;
}
}
private int _pageTotal;
[Browsable(false)]
public int PageTotal
{
get
{
if (ViewState["pagetotal"] != null)
{
_pageTotal = int.Parse(ViewState["pagetotal"].ToString());
}
return _pageTotal;
}
set
{
ViewState["pagetotal"] = value;
_pageTotal = value;
}
}
private int _pageRecords;
[Browsable(false)]
public int PageRecords
{
get
{
if (ViewState["pagerecords"] != null)
{
_pageRecords = int.Parse(ViewState["pagerecords"].ToString());
}
return _pageRecords;
}
set
{
ViewState["pagerecords"] = value;
litTotalRecord.Text = value.ToString();
_pageRecords = value;
}
}
private object _pageControl;
[Browsable(false)]
public object PageControl
{
get
{
if (_pageControl == null) _pageControl = new object();
if (PageControl is Repeater)
{
Repeater rpt = (Repeater)PageControl;
_rptControl = rpt;
}
else if (PageControl is GridView)
{
GridView gv = (GridView)PageControl;
}
return _pageControl;
}
set { _pageControl = value; }
}
private object _pageDataSource;
[Browsable(false)]
public object PageDataSource
{
get { return _pageDataSource; }
set { _pageDataSource = value; }
}
private Repeater _rptControl;
[Browsable(false)]
public Repeater RptControl
{
get
{
if (_rptControl == null) _rptControl = new Repeater();
return _rptControl;
}
set { _rptControl = value; }
}
public delegate void bindData(int pageSize, int pageIndex);
private bindData _bindDelegate;
[Browsable(false)]
public bindData BindDelegate
{
get
{
if (Session["bindDelegate"] != null)
{
_bindDelegate = new bindData((bindData)Session["bindDelegate"]);
}
return _bindDelegate;
}
set { _bindDelegate = value; }
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
LabelNumberOfPages.Text = PageTotal.ToString();
setImgButtonStatus();
}
protected void DropDownListPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
IndexPage = 1;
reBindData();
}
private void reBindData()
{
PageSize = Convert.ToInt32(DropDownListPageSize.SelectedItem.Value);
BindDelegate(PageSize, IndexPage);
int total = PageTotal;
LabelNumberOfPages.Text = PageTotal.ToString();
setImgButtonStatus();
}
protected void ImageButtonNext_Command(object sender, CommandEventArgs e)
{
if (e.CommandName == "Page" && e.CommandArgument.ToString() == "Next")
{
IndexPage = IndexPage + 1;
BindDelegate(PageSize, IndexPage);
setImgButtonStatus();
//this.Page.Response.Redirect(HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath);
}
else if (e.CommandName == "Page" && e.CommandArgument.ToString() == "Prev")
{
IndexPage = IndexPage - 1;
if (IndexPage != 0)
BindDelegate(PageSize, IndexPage);
setImgButtonStatus();
}
else if (e.CommandName == "Page" && e.CommandArgument.ToString() == "First")
{
IndexPage = 1;
BindDelegate(PageSize, IndexPage);
setImgButtonStatus();
}
else if (e.CommandName == "Page" && e.CommandArgument.ToString() == "Last")
{
IndexPage = PageTotal;
BindDelegate(PageSize, IndexPage);
setImgButtonStatus();
}
}
private void setImgButtonStatus()
{
if (IndexPage == PageTotal)
{
ImageButtonNext.Visible = false;
ImageButtonLast.Visible = false;
}
else
{
ImageButtonNext.Visible = true;
ImageButtonLast.Visible = true;
}
if (IndexPage == 1)
{
ImageButtonFirst.Visible = false;
ImageButtonPrev.Visible = false;
}
else
{
ImageButtonFirst.Visible = true;
ImageButtonPrev.Visible = true;
}
TextBoxPage.Text = IndexPage.ToString();
}
//protected void TextBoxPage_TextChanged(object sender, EventArgs e)
//{
// IndexPage = Convert.ToInt32(TextBoxPage.Text.Trim());
// reBindData();
//}
}
接着是分页的逻辑调用。效果类似SQL的SP
/// <summary>
///
/// </summary>
/// <param name="pageRecordCount">一共多少条记录</param>
/// <param name="pageTotal">一共多少页</param>
/// <param name="pageSize">每页显示记录数</param>
/// <param name="pageIndex">当前页索引</param>
/// <returns></returns>
public IQueryable GetQCHistoryView(out int pageRecordCount, out int pageTotal, int pageSize, int pageIndex)
{
pageRecordCount = InspectionHistoryDAL.DB.VW_QCInspectionHistory.Count();
int resut = 1;
pageTotal = Math.DivRem(pageRecordCount, pageSize, out resut);
if (resut != 0)
{
pageTotal = pageTotal + 1;
}
int startIndex = pageIndex == 0 ? pageIndex : pageSize * (pageIndex - 1);
//动态生成查询表达式
if (startIndex <= 0)
{
return InspectionHistoryDAL.DB.VW_QCInspectionHistory
.OrderByDescending(c => c.HistoryID).Take(pageSize);
}
else
{
IQueryable iq = InspectionHistoryDAL.DB.VW_QCInspectionHistory.Skip<VW_QCInspectionHistory>(startIndex).Take(pageSize);
return iq;
}
}
///
/// </summary>
/// <param name="pageRecordCount">一共多少条记录</param>
/// <param name="pageTotal">一共多少页</param>
/// <param name="pageSize">每页显示记录数</param>
/// <param name="pageIndex">当前页索引</param>
/// <returns></returns>
public IQueryable GetQCHistoryView(out int pageRecordCount, out int pageTotal, int pageSize, int pageIndex)
{
pageRecordCount = InspectionHistoryDAL.DB.VW_QCInspectionHistory.Count();
int resut = 1;
pageTotal = Math.DivRem(pageRecordCount, pageSize, out resut);
if (resut != 0)
{
pageTotal = pageTotal + 1;
}
int startIndex = pageIndex == 0 ? pageIndex : pageSize * (pageIndex - 1);
//动态生成查询表达式
if (startIndex <= 0)
{
return InspectionHistoryDAL.DB.VW_QCInspectionHistory
.OrderByDescending(c => c.HistoryID).Take(pageSize);
}
else
{
IQueryable iq = InspectionHistoryDAL.DB.VW_QCInspectionHistory.Skip<VW_QCInspectionHistory>(startIndex).Take(pageSize);
return iq;
}
}
然后看页面如何调用
protected override void OnInit(EventArgs e)
{
BindData(DataPage1.PageSize, 1);
Session[TagName.SESSION_BINDDELEGATE] = new FMS.DynamicData.Content.DataPage.bindData(BindData);
}
public void BindData(int pageSize, int pageIndex)
{
try
{
IQueryable iq = _bo.GetQCHistoryView(out pageSum, out totalPage, pageSize, pageIndex);
DataPage1.PageTotal = totalPage;
DataPage1.IndexPage = pageIndex;
DataPage1.PageSize = pageSize;
DataPage1.PageRecords = pageSum;
rptHistory.DataSource = iq;
rptHistory.DataBind();
}
catch (Exception ce)
{
Console.WriteLine(ce.ToString());
}
}
{
BindData(DataPage1.PageSize, 1);
Session[TagName.SESSION_BINDDELEGATE] = new FMS.DynamicData.Content.DataPage.bindData(BindData);
}
public void BindData(int pageSize, int pageIndex)
{
try
{
IQueryable iq = _bo.GetQCHistoryView(out pageSum, out totalPage, pageSize, pageIndex);
DataPage1.PageTotal = totalPage;
DataPage1.IndexPage = pageIndex;
DataPage1.PageSize = pageSize;
DataPage1.PageRecords = pageSum;
rptHistory.DataSource = iq;
rptHistory.DataBind();
}
catch (Exception ce)
{
Console.WriteLine(ce.ToString());
}
}