GridView分页显示(笔记)
namespace jzlib.asp.net.Controls
{
public enum DisplayType //枚举类型
{
DropDownList,
TextBoxAndButton
}
public enum Position
{
Top,
Bottom
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class CustomPageSetting : CustomSetting, IStateManager
{
#region private fields
private bool _aotuPage;
private bool _customSupport;
private StateBag _statebag;
private string _message;
private TableItemStyle _customPageRowStyle;
private const string CustomePagingKey = "CustomePaging";
private DisplayType _displayType = DisplayType.DropDownList;
private Position _pos = Position.Top;
#endregion
public CustomPageSetting()
{
this._statebag = new StateBag(false);
}
protected override void RegisterGridViewEvent()
{
if (Owner != null)
{
if (this._aotuPage)
{
Owner.AllowPaging = true;
}
Owner.PageIndexChanging += new System.Web.UI.WebControls.GridViewPageEventHandler(Owner_PageIndexChanging);
Owner.CreateCustomPageRowEvent += new CreateCustomPageRowHandler(Owner_CreateCustomPageRowEvent);
Owner.OnBindComplete += new BindCompleteHander(Owner_OnBindComplete);
}
}
void Owner_OnBindComplete(DataTable dataSource)
{
if (!_customSupport)
{
return;
}
if (dataSource == null)
{
return;
}
//分页
int page_Size = Owner.PageSize;
int page_Count = Owner.PageCount;
int page_Current = Owner.PageIndex + 1;
for (int i = 1; i <= page_Count; i++)
{
pageList.Items.Add(new ListItem("第" + i.ToString() + "页", i.ToString()));
}
pageList.SelectedValue = page_Current.ToString();
pageBox.Text = page_Current.ToString();
lblRowsCount.Text = dataSource.Rows.Count.ToString();
lblPageCount.Text = page_Count.ToString();
lblCurrentPage.Text = page_Current.ToString();
#region 显示页导航
btnFirst.Enabled = true;
btnPrev.Enabled = true;
btnNext.Enabled = true;
btnLast.Enabled = true;
if (Owner.PageIndex == 0)
{
btnFirst.Enabled = false;
btnPrev.Enabled = false;
if (page_Count == 0)
{
btnNext.Enabled = false;
btnLast.Enabled = false;
}
if (Owner.PageCount == 1)
{
btnLast.Enabled = false;
btnNext.Enabled = false;
}
}
else if (Owner.PageIndex == Owner.PageCount - 1)
{
btnLast.Enabled = false;
btnNext.Enabled = false;
}
#endregion
}
#region NavigateToPage
public void NavigateToPage(object sender, CommandEventArgs e)
{
btnFirst.Enabled = true;
btnPrev.Enabled = true;
btnNext.Enabled = true;
btnLast.Enabled = true;
switch (e.CommandArgument.ToString())
{
case "Prev":
if (Owner.PageIndex > 0)
{
Owner.PageIndex -= 1;
}
break;
case "Next":
if (Owner.PageIndex < (Owner.PageCount - 1))
{
Owner.PageIndex += 1;
}
break;
case "First":
Owner.PageIndex = 0;
break;
case "Last":
Owner.PageIndex = Owner.PageCount - 1;
break;
}
if (Owner.PageIndex == 0)
{
btnFirst.Enabled = false;
btnPrev.Enabled = false;
if (Owner.PageCount == 1)
{
btnLast.Enabled = false;
btnNext.Enabled = false;
}
}
else if (Owner.PageIndex == Owner.PageCount - 1)
{
btnLast.Enabled = false;
btnNext.Enabled = false;
}
Owner.OnBind();
}
#endregion
[Description("自定义分页行的样式"), Category("jillzhang扩展"), DefaultValue((string)null),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content), NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty)]
public TableItemStyle CusPageRowStyle
{
get
{
if (this._customPageRowStyle == null)
{
this._customPageRowStyle = new TableItemStyle();
((IStateManager)this._customPageRowStyle).TrackViewState();
}
return this._customPageRowStyle;
}
}
Label lblCurrentPage;
Label lblPageCount;
Label lblRowsCount;
LinkButton btnFirst;
LinkButton btnPrev;
LinkButton btnNext;
LinkButton btnLast;
DropDownList pageList;
TextBox pageBox;
Button confimBtn;
void Owner_CreateCustomPageRowEvent(System.Web.UI.WebControls.Table table, System.Web.UI.WebControls.GridViewRow row)
{
if (!_customSupport)
{
return;
}
lblCurrentPage = new Label();
lblCurrentPage.ForeColor = ColorTranslator.FromHtml("#e78a29");
lblCurrentPage.Text = "1";
lblPageCount = new Label();
lblPageCount.Text = "1";
lblRowsCount = new Label();
lblRowsCount.ForeColor = ColorTranslator.FromHtml("#e78a29");
btnFirst = new LinkButton();
btnFirst.Text = "首页";
btnFirst.Command += new CommandEventHandler(NavigateToPage);
btnFirst.CommandName = "Pager";
btnFirst.CommandArgument = "First";
btnFirst.CausesValidation = false;
btnPrev = new LinkButton();
btnPrev.Text = "上一页";
btnPrev.Command += new CommandEventHandler(NavigateToPage);
btnPrev.CommandName = "Pager";
btnPrev.CommandArgument = "Prev";
btnPrev.CausesValidation = false;
btnNext = new LinkButton();
btnNext.Text = "下一页";
btnNext.Command += new CommandEventHandler(NavigateToPage);
btnNext.CommandName = "Pager";
btnNext.CommandArgument = "Next";
btnNext.CausesValidation = false;
btnLast = new LinkButton();
btnLast.Text = "尾页";
btnLast.Command += new CommandEventHandler(NavigateToPage);
btnLast.CommandName = "Pager";
btnLast.CommandArgument = "Last";
btnLast.CausesValidation = false;
pageList = new DropDownList();
pageList.AutoPostBack = true;
pageList.SelectedIndexChanged += new EventHandler(pageList_SelectedIndexChanged);
pageBox = new TextBox();
pageBox.ID = "PageBox_Jillzhang";
pageBox.Width = 40;
confimBtn = new Button();
confimBtn.Text = "转到";
confimBtn.Click += new EventHandler(confimBtn_Click);
row.MergeStyle(_customPageRowStyle);
TableCell cell = CreateCustomPageCell();
Literal l1 = new Literal();
l1.Text = "页次:";
cell.Controls.Add(l1);
cell.Wrap = false;
cell.Controls.Add(lblCurrentPage);
l1 = new Literal();
l1.Text = "页/";
cell.Controls.Add(l1);
cell.Controls.Add(lblPageCount);
l1 = new Literal();
l1.Text = "页,共";
cell.Controls.Add(l1);
cell.Controls.Add(lblRowsCount);
l1 = new Literal();
l1.Text = "条记录";
cell.Controls.Add(l1);
l1 = new Literal();
l1.Text = " [";
cell.Controls.Add(l1);
cell.Controls.Add(btnFirst);
l1 = new Literal();
l1.Text = "] ";
cell.Controls.Add(l1);
l1 = new Literal();
l1.Text = " [";
cell.Controls.Add(l1);
cell.Controls.Add(btnPrev);
l1 = new Literal();
l1.Text = "] ";
cell.Controls.Add(l1);
l1 = new Literal();
l1.Text = " [";
cell.Controls.Add(l1);
cell.Controls.Add(btnNext);
l1 = new Literal();
l1.Text = "] ";
cell.Controls.Add(l1);
l1 = new Literal();
l1.Text = " [";
cell.Controls.Add(l1);
cell.Controls.Add(btnLast);
l1 = new Literal();
l1.Text = "] ";
cell.Controls.Add(l1);
l1 = new Literal();
l1.Text = " 转到:";
cell.Controls.Add(l1);
if (_displayType == DisplayType.DropDownList)
{
cell.Controls.Add(pageList);
}
else
{
cell.Controls.Add(pageBox);
cell.Controls.Add(confimBtn);
}
row.Cells.Add(cell);
if (_pos == Position.Top)
{
table.Rows.AddAt(0, row);
}
else
{
table.Rows.Add(row);
}
}
void confimBtn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
if (btn != null)
{
int pageIndex = 0;
if (!Int32.TryParse(pageBox.Text.Trim(), out pageIndex))
{
pageIndex = 0;
}
pageIndex--;
if (pageIndex < 0)
{
pageIndex = 0;
}
Owner.PageIndex = pageIndex;
Owner.OnBind();
}
}
void pageList_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList list = sender as DropDownList;
if (list != null)
{
int pageIndex = Convert.ToInt32(list.SelectedValue)-1;
if (pageIndex < 0)
{
pageIndex = 0;
}
Owner.PageIndex = pageIndex;
Owner.OnBind();
}
}
void Owner_PageIndexChanging(object sender, System.Web.UI.WebControls.GridViewPageEventArgs e)
{
if (_aotuPage)
{
Owner.PageIndex = e.NewPageIndex;
Owner.OnBind();
}
}
private TableCell CreateCustomPageCell()
{
TableCell cell = new TableCell();
if (Owner.HeaderRow != null)
{
cell.ColumnSpan = Owner.HeaderRow.Cells.Count;
}
return cell;
}
#region public property
/// <summary>
/// 指示是否支持自动分页
/// </summary>
[Description("指示是否支持自动分页"), Category("jillzhang扩展"), NotifyParentProperty(true)]
public bool SelfMotion
{
get
{
return _aotuPage;
}
set
{
_aotuPage = value;
}
}
/// <summary>
/// 指示是否支持自动分页
/// </summary>
[Description("显示分页的方式"), Category("jillzhang扩展"), NotifyParentProperty(true)]
public DisplayType DisplayType
{
get
{
return _displayType;
}
set
{
_displayType = value;
}
}
/// <summary>
/// 显示分页行的位置
/// </summary>
[Description("显示分页行的位置"), Category("jillzhang扩展"), NotifyParentProperty(true)]
public Position Position
{
get
{
return _pos;
}
set
{
_pos = value;
}
}
[Description("指示是否支持自定义分页"), Category("jillzhang扩展"), NotifyParentProperty(true)]
public bool CustomSupport
{
get
{
return _customSupport;
}
set
{
_customSupport = value;
}
}
#endregion
#region 实现IStateManager
void IStateManager.LoadViewState(object savedState)
{
_message = _statebag[CustomePagingKey].ToString();
if (savedState != null)
{
((IStateManager)_statebag).LoadViewState(savedState);
}
}
object IStateManager.SaveViewState()
{
if (!((IDictionary)_statebag).Contains(CustomePagingKey) || _statebag.IsItemDirty(CustomePagingKey))
{
_statebag.Clear();
_statebag.Add(CustomePagingKey, _message);
}
return ((IStateManager)_statebag).SaveViewState();
}
void IStateManager.TrackViewState()
{
((IStateManager)_statebag).TrackViewState();
}
bool IStateManager.IsTrackingViewState
{
get
{
return ((IStateManager)_statebag).IsTrackingViewState;
}
}
#endregion
}
}