C#自定义改写GridView的分页控件功能
2009-07-25 15:15
507 查看
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
using System.Text.RegularExpressions;
namespace ZLDK.JXGL.WebControls
{
[ToolboxData("<{0}:uGridView runat=server></{0}:uGridView>")]
public class uGridView : GridView, iuControl
{
//委托事件
public delegate void SelectNumberEventHandler(SelectNumberEventArgs e);
private static int summaryCount = 0; //保存其数量值
private Paging.PagingStyleCollection _pagingStyle; //是否要进行分页
#region 构造函数
public uGridView(): base()
{
ViewState["IsHandle"] = true;
ViewState["IsFixHeader"] = true;
// 新增“uGridView_RowDataBound”事件处理
this.RowDataBound += new GridViewRowEventHandler(uGridView_RowDataBound);
}
#endregion
#region 属性
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string CodeID
{
get
{
String s = (String)ViewState["CodeID"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["CodeID"] = value;
}
}
[Description("是否可以使用")]
[DefaultValue(true)]
public override bool Enabled
{
get
{
return base.Enabled;
}
set
{
if (IsHandle)
base.Enabled = value;
}
}
[Bindable(true)]
[Category("Appearance")]
[DefaultValue(true)]
[Localizable(true)]
[Description("是否可以编程控制Enabled")]
public bool IsHandle
{
get
{
return (bool)ViewState["IsHandle"];
}
set
{
ViewState["IsHandle"] = value;
}
}
/// <summary>
/// 是否固定表头?
/// </summary>
[Description("是否固定表头?"), Category("扩展"), DefaultValue(false), NotifyParentProperty(true)]
public virtual bool IsFixHeader
{
get { return (bool)ViewState["IsFixHeader"]; }
set { ViewState["IsFixHeader"] = value; }
}
//获取记录总数
[Description("数据总数"), DefaultValue("0"), Category("扩展")]
public int SummaryCount
{
get { return summaryCount; }
set { summaryCount = value; }
}
// 自定义分页样式
[Description("自定义分页样式"), DefaultValue("default"), Category("扩展")]
public Paging.PagingStyleCollection PagingStyle
{
get { return _pagingStyle; }
set { _pagingStyle = value; }
}
#endregion
#region 数据绑定事件
protected void uGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
//固定表头
if (this.IsFixHeader && e.Row.RowType == DataControlRowType.Header)
{
for (int j = 0; j < e.Row.Cells.Count; j++)
{
e.Row.Cells[j].Attributes.Add("style", " position: relative; top: expression(this.offsetParent.scrollTop-1);");
}
}
}
#endregion
#region 固定表头
protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
{
if (dataSource == null)
{
DataControlField[] fieldArray = new DataControlField[this.Columns.Count];
this.Columns.CopyTo(fieldArray, 0);
if (fieldArray != null && fieldArray.Length > 0)
{
if (this.ShowHeader && (this.HeaderRow == null))
{
GridViewRow headerRow = null;
if (this.HeaderRow == null)
{
headerRow = this.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
this.InitializeRow(headerRow, fieldArray);
FieldInfo field = typeof(System.Web.UI.WebControls.GridView).GetField("_headerRow", BindingFlags.NonPublic | BindingFlags.Instance);
if (field != null)
{
field.SetValue(this, headerRow);
}
Table headerTable = this.CreateChildTable();
headerTable.Rows.Add(headerRow);
Controls.Add(headerTable);
}
else
{
headerRow = this.HeaderRow;
}
GridViewRowEventArgs args = new GridViewRowEventArgs(headerRow);
this.OnRowCreated(args);
if (dataBinding)
{
headerRow.DataBind();
this.OnRowDataBound(args);
headerRow.DataItem = null;
}
}
}
return 0;
}
else
{
return base.CreateChildControls(dataSource, dataBinding);
}
}
#endregion
#region 创建分页的各个控件
/// <summary>
/// 创建分页的各个控件
/// </summary>
/// <param name="e"></param>
protected override void OnRowCreated(GridViewRowEventArgs e)
{
#region 自定义分页样式
if (e.Row.RowType == DataControlRowType.Pager && PagingStyle == Paging.PagingStyleCollection.Default)
{
LinkButton First = new LinkButton();
First.ID = "First";
First.ToolTip = "首页";
First.CausesValidation = false;
LinkButton Prev = new LinkButton();
Prev.ID = "Prev";
Prev.ToolTip = "后一页";
Prev.CausesValidation = false;
LinkButton Next = new LinkButton();
Next.ID = "Next";
Next.ToolTip = "前一页";
Next.CausesValidation = false;
LinkButton Last = new LinkButton();
Last.ID = "Last";
Last.ToolTip = "尾页";
Last.CausesValidation = false;
TableCell tc = new TableCell();
e.Row.Controls.Clear();
#region “首页 上一页 下一页 尾页”按钮
if (!String.IsNullOrEmpty(PagerSettings.FirstPageImageUrl))
{
First.Text = "<img src='" + ResolveUrl(PagerSettings.FirstPageImageUrl) + "' border='0'/>";
}
else
{
First.Text = PagerSettings.FirstPageText;
// First.Text = "<font face='webdings'>9</font>";
}
First.CommandName = "First";
First.Font.Underline = false;
if (!String.IsNullOrEmpty(PagerSettings.PreviousPageImageUrl))
{
Prev.Text = "<img src='" + ResolveUrl(PagerSettings.PreviousPageImageUrl) + "' border='0'/>";
}
else
{
Prev.Text = PagerSettings.PreviousPageText;
// Prev.Text = "<font face='webdings'>3</font>";
}
Prev.CommandName = "Prev";
Prev.Font.Underline = false;
if (!String.IsNullOrEmpty(PagerSettings.NextPageImageUrl))
{
Next.Text = "<img src='" + ResolveUrl(PagerSettings.NextPageImageUrl) + "' border='0'/>";
}
else
{
Next.Text = PagerSettings.NextPageText;
//Next.Text = "<font face='webdings'>4</font>";
}
Next.CommandName = "Next";
Next.Font.Underline = false;
if (!String.IsNullOrEmpty(PagerSettings.LastPageImageUrl))
{
Last.Text = "<img src='" + ResolveUrl(PagerSettings.LastPageImageUrl) + "' border='0'/>";
}
else
{
Last.Text = PagerSettings.LastPageText;
//Last.Text = "<font face='webdings'>:</font>";
}
Last.CommandName = "Last";
Last.Font.Underline = false;
tc.Controls.Add(First);
tc.Controls.Add(new LiteralControl(" "));
tc.Controls.Add(Prev);
tc.Controls.Add(new LiteralControl(" "));
if (this.PageIndex <= 0)
{
First.Enabled = Prev.Enabled = false;
}
else
{
First.Enabled = Prev.Enabled = true;
}
tc.Controls.Add(Next);
tc.Controls.Add(new LiteralControl(" "));
tc.Controls.Add(Last);
tc.Controls.Add(new LiteralControl(" "));
if (this.PageIndex >= PageCount - 1)
{
Next.Enabled = Last.Enabled = false;
}
else
{
Next.Enabled = Last.Enabled = true;
}
#endregion
#region 显示总记录数 每页记录数 当前页数/总页数 /和加TextBox Button DropDownList控件
tc.Controls.Add(new LiteralControl((PageIndex + 1).ToString()));
tc.Controls.Add(new LiteralControl("/"));
tc.Controls.Add(new LiteralControl(PageCount.ToString()));
tc.Controls.Add(new LiteralControl(" 共<b>"));
tc.Controls.Add(new LiteralControl(SummaryCount.ToString()));
tc.Controls.Add(new LiteralControl("</b>条记录 到"));
//添加输入框和按纽
TextBox txbDigit = new TextBox();
txbDigit.ID = "txbDigit";
txbDigit.Style.Add("width", "18px");
//txbDigit.Style.Add("height", "20px"); //height:20px;
tc.Controls.Add(txbDigit);
Button btnGoto = new Button();
btnGoto.ID = "btnGoto";
btnGoto.Text = "Go";
btnGoto.ToolTip = "查询";
btnGoto.Style.Add("cursor", "hand");
//btnGoto.Style.Add("height", "25px");
btnGoto.CommandName = "goto";
btnGoto.CausesValidation = false;
tc.Controls.Add(btnGoto);
tc.Controls.Add(new LiteralControl(" 每页显示"));
//使用下拉框来进行
DropDownList ddlList = new DropDownList();
ddlList.ID = "ddlList";
ddlList.Items.Add(new ListItem("10", "10"));
ddlList.Items.Add(new ListItem("20", "20"));
ddlList.Items.Add(new ListItem("30", "30"));
ddlList.Items.Add(new ListItem("40", "40"));
ddlList.Items.Add(new ListItem("50", "50"));
ddlList.SelectedValue = PageSize.ToString(); //显示行数
ddlList.Style.Add("Width", "40px");
ddlList.AutoPostBack = true; //触发其响应事件
ddlList.SelectedIndexChanged += new EventHandler(DropDownList_SelectChanged);
tc.Controls.Add(ddlList);
tc.Controls.Add(new LiteralControl("条记录"));
#endregion
tc.ColumnSpan = this.Columns.Count;
PagerStyle.HorizontalAlign = HorizontalAlign.Right; // 分页栏显示在右边
e.Row.Controls.Add(tc);
}
#endregion
base.OnRowCreated(e);
}
#endregion
#region LinkButton和button的事件处理
protected override void OnRowCommand(GridViewCommandEventArgs e)
{
//处理每个控件的事件,让前台来进行接收处理
GridViewRow pagerRow = this.BottomPagerRow;
LinkButton lbFirst = (LinkButton)pagerRow.FindControl("First");
LinkButton lbPrev = (LinkButton)pagerRow.FindControl("Prev");
LinkButton lbNext = (LinkButton)pagerRow.FindControl("Next");
LinkButton lbLast = (LinkButton)pagerRow.FindControl("Last");
bool flag = true; //通过使用标识来判断
switch (e.CommandName)
{
case "First":
this.PageIndex = 0;
lbFirst.Enabled = lbPrev.Enabled = false;
lbNext.Enabled = lbLast.Enabled = true;
flag = true;
break;
case "Prev":
if (PageIndex >= 1)
{
this.PageIndex = PageIndex - 1;
lbFirst.Enabled = lbPrev.Enabled = true;
}
else
{
lbFirst.Enabled = lbPrev.Enabled = true;
}
lbNext.Enabled = lbLast.Enabled = true;
flag = true;
break;
case "Next":
if (PageIndex < PageCount - 1)
{
this.PageIndex = PageIndex + 1;
lbNext.Enabled = lbLast.Enabled = true;
}
else
{
lbNext.Enabled = lbLast.Enabled = false;
}
lbFirst.Enabled = lbPrev.Enabled = true;
flag = true;
break;
case "Last":
this.PageIndex = PageCount - 1;
lbFirst.Enabled = lbPrev.Enabled = true;
lbNext.Enabled = lbLast.Enabled = false;
flag = true;
break;
case "goto":
TextBox txbContent = (TextBox)this.BottomPagerRow.FindControl("txbDigit");
//使用正则表达式,验证输入的值
Match match = Regex.Match(txbContent.Text.Trim(), @"^[1-" + PageCount + "]$");
if (match.Success)
{
this.PageIndex = Convert.ToInt32(match.Value) - 1;
flag = true;
}
else
{
flag = false;
}
break;
}
//调用前台事件
if (flag)
{
//重新加载数据
EventArgs ea = new EventArgs();
DataBindingClick(this, ea);
}
base.OnRowCommand(e);
}
#endregion
#region 触发更新事件,用于LinkButtn和Button是触发事件
public event EventHandler ButtonClick;
protected virtual void DataBindingClick(object sender, EventArgs e)
{
if (ButtonClick != null)
{
ButtonClick(sender, e);
}
}
#endregion
#region dropdownlist的事件处理
public event SelectNumberEventHandler SelectNumber;
protected virtual void SelectNumberChanged(SelectNumberEventArgs e)
{
if (SelectNumber != null)
{
SelectNumber(e);
}
}
//把DropDownList选择得值返回给前台,让其进行操作,存入一个类中
protected void DropDownList_SelectChanged(object sender, EventArgs e)
{
DropDownList ddlSelect = sender as DropDownList;
SelectNumberEventArgs selectNum = new SelectNumberEventArgs(Convert.ToInt32(ddlSelect.SelectedValue));
SelectNumberChanged(selectNum);
}
#endregion
/// <summary>
/// 注册控件有scriptManager的页面,这样几个控件才能激活,它必须在Gridview绑定后才能注册
/// </summary>
/// <param name="smRegister">注册的对象</param>
public void RegisterControl(ScriptManager smRegister)
{
try
{
//注册触发控件
GridViewRow gvr = this.BottomPagerRow;
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("First"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("Prev"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("Next"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("Last"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("btnGoto"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("ddlList"));
}
catch
{ }
}
}
/// <summary>
/// 自定义分页相关
/// </summary>
public class Paging
{
/// <summary>
/// 自定义分页样式
/// </summary>
public enum PagingStyleCollection
{
/// <summary>
/// 不用自定义分页样式
/// </summary>
None,
/// <summary>
/// 默认自定义分页样式
/// </summary>
Default
}
}
//用来存储dropdownList选择的数据
public class SelectNumberEventArgs: EventArgs
{
private int selectDigit;
public SelectNumberEventArgs(int digit)
{
selectDigit = digit;
}
public int SelectNum
{
get
{
return selectDigit;
}
}
}
}
直接引用该uGridView,如果要想产生分页效果,那么几个属性必须设置
一个是AllowPaging="True" 和PagingStyle="default"
然后在HTML代码中加入样式,是指“首页、尾页”的显示样式
<PagerSettings
FirstPageText="<font face='webdings'>9</font>" PreviousPageText="<font face='webdings'>3</font>"
NextPageText="<font face='webdings'>4</font>" LastPageText="<font face='webdings'>:</font>" />
然后对该uGridView两个事件进行代码操作,主要就是重新绑定数据源
//加载客户信息
private void setGridView(int pageSize)
{
try
{
//根据选择条件得到数据
clsST_JC_KHXX[] st_xx=ywJC_KHXX.stSelectOuterKeyJC_KHXX("2");
if (st_xx == null)
{
uGridView1.DataSource = null;
uGridView1.DataBind();
return;
}
//绑定数据源共有多少条记录,并在分页栏中显示
uGridView1.SummaryCount = st_xx.Length;
//判断是否有每页显示的记录有否改变,如果改变必须把值直接赋给PageSize
if (pageSize != 0)
{
uGridView1.PageSize = pageSize;
}
uGridView1.DataSource = st_xx;
uGridView1.DataBind();
}
catch (Exception ex)
{
throw ex;
}
}
双击uGridView中ButtonClick(LinkButton、Button的触发)和SelectNumber(DropDownList)事件
在ButtonClick事件下直接重新绑定
protected void GridView1_ButtonClick(object sender, EventArgs e)
{
setGridView(0);
}
在SelectNumber事件下
protected void GridView1_SelectNumber(ZLDK.JXGL.WebControls.SelectNumberEventArgs e)
{
setGridView(e.SelectNum); //e.SelectNum是dropDownList选择的值, //ZLDK.JXGL.WebControls是命名控件下类SelectNumberEventArgs
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
using System.Text.RegularExpressions;
namespace ZLDK.JXGL.WebControls
{
[ToolboxData("<{0}:uGridView runat=server></{0}:uGridView>")]
public class uGridView : GridView, iuControl
{
//委托事件
public delegate void SelectNumberEventHandler(SelectNumberEventArgs e);
private static int summaryCount = 0; //保存其数量值
private Paging.PagingStyleCollection _pagingStyle; //是否要进行分页
#region 构造函数
public uGridView(): base()
{
ViewState["IsHandle"] = true;
ViewState["IsFixHeader"] = true;
// 新增“uGridView_RowDataBound”事件处理
this.RowDataBound += new GridViewRowEventHandler(uGridView_RowDataBound);
}
#endregion
#region 属性
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string CodeID
{
get
{
String s = (String)ViewState["CodeID"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["CodeID"] = value;
}
}
[Description("是否可以使用")]
[DefaultValue(true)]
public override bool Enabled
{
get
{
return base.Enabled;
}
set
{
if (IsHandle)
base.Enabled = value;
}
}
[Bindable(true)]
[Category("Appearance")]
[DefaultValue(true)]
[Localizable(true)]
[Description("是否可以编程控制Enabled")]
public bool IsHandle
{
get
{
return (bool)ViewState["IsHandle"];
}
set
{
ViewState["IsHandle"] = value;
}
}
/// <summary>
/// 是否固定表头?
/// </summary>
[Description("是否固定表头?"), Category("扩展"), DefaultValue(false), NotifyParentProperty(true)]
public virtual bool IsFixHeader
{
get { return (bool)ViewState["IsFixHeader"]; }
set { ViewState["IsFixHeader"] = value; }
}
//获取记录总数
[Description("数据总数"), DefaultValue("0"), Category("扩展")]
public int SummaryCount
{
get { return summaryCount; }
set { summaryCount = value; }
}
// 自定义分页样式
[Description("自定义分页样式"), DefaultValue("default"), Category("扩展")]
public Paging.PagingStyleCollection PagingStyle
{
get { return _pagingStyle; }
set { _pagingStyle = value; }
}
#endregion
#region 数据绑定事件
protected void uGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
//固定表头
if (this.IsFixHeader && e.Row.RowType == DataControlRowType.Header)
{
for (int j = 0; j < e.Row.Cells.Count; j++)
{
e.Row.Cells[j].Attributes.Add("style", " position: relative; top: expression(this.offsetParent.scrollTop-1);");
}
}
}
#endregion
#region 固定表头
protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
{
if (dataSource == null)
{
DataControlField[] fieldArray = new DataControlField[this.Columns.Count];
this.Columns.CopyTo(fieldArray, 0);
if (fieldArray != null && fieldArray.Length > 0)
{
if (this.ShowHeader && (this.HeaderRow == null))
{
GridViewRow headerRow = null;
if (this.HeaderRow == null)
{
headerRow = this.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
this.InitializeRow(headerRow, fieldArray);
FieldInfo field = typeof(System.Web.UI.WebControls.GridView).GetField("_headerRow", BindingFlags.NonPublic | BindingFlags.Instance);
if (field != null)
{
field.SetValue(this, headerRow);
}
Table headerTable = this.CreateChildTable();
headerTable.Rows.Add(headerRow);
Controls.Add(headerTable);
}
else
{
headerRow = this.HeaderRow;
}
GridViewRowEventArgs args = new GridViewRowEventArgs(headerRow);
this.OnRowCreated(args);
if (dataBinding)
{
headerRow.DataBind();
this.OnRowDataBound(args);
headerRow.DataItem = null;
}
}
}
return 0;
}
else
{
return base.CreateChildControls(dataSource, dataBinding);
}
}
#endregion
#region 创建分页的各个控件
/// <summary>
/// 创建分页的各个控件
/// </summary>
/// <param name="e"></param>
protected override void OnRowCreated(GridViewRowEventArgs e)
{
#region 自定义分页样式
if (e.Row.RowType == DataControlRowType.Pager && PagingStyle == Paging.PagingStyleCollection.Default)
{
LinkButton First = new LinkButton();
First.ID = "First";
First.ToolTip = "首页";
First.CausesValidation = false;
LinkButton Prev = new LinkButton();
Prev.ID = "Prev";
Prev.ToolTip = "后一页";
Prev.CausesValidation = false;
LinkButton Next = new LinkButton();
Next.ID = "Next";
Next.ToolTip = "前一页";
Next.CausesValidation = false;
LinkButton Last = new LinkButton();
Last.ID = "Last";
Last.ToolTip = "尾页";
Last.CausesValidation = false;
TableCell tc = new TableCell();
e.Row.Controls.Clear();
#region “首页 上一页 下一页 尾页”按钮
if (!String.IsNullOrEmpty(PagerSettings.FirstPageImageUrl))
{
First.Text = "<img src='" + ResolveUrl(PagerSettings.FirstPageImageUrl) + "' border='0'/>";
}
else
{
First.Text = PagerSettings.FirstPageText;
// First.Text = "<font face='webdings'>9</font>";
}
First.CommandName = "First";
First.Font.Underline = false;
if (!String.IsNullOrEmpty(PagerSettings.PreviousPageImageUrl))
{
Prev.Text = "<img src='" + ResolveUrl(PagerSettings.PreviousPageImageUrl) + "' border='0'/>";
}
else
{
Prev.Text = PagerSettings.PreviousPageText;
// Prev.Text = "<font face='webdings'>3</font>";
}
Prev.CommandName = "Prev";
Prev.Font.Underline = false;
if (!String.IsNullOrEmpty(PagerSettings.NextPageImageUrl))
{
Next.Text = "<img src='" + ResolveUrl(PagerSettings.NextPageImageUrl) + "' border='0'/>";
}
else
{
Next.Text = PagerSettings.NextPageText;
//Next.Text = "<font face='webdings'>4</font>";
}
Next.CommandName = "Next";
Next.Font.Underline = false;
if (!String.IsNullOrEmpty(PagerSettings.LastPageImageUrl))
{
Last.Text = "<img src='" + ResolveUrl(PagerSettings.LastPageImageUrl) + "' border='0'/>";
}
else
{
Last.Text = PagerSettings.LastPageText;
//Last.Text = "<font face='webdings'>:</font>";
}
Last.CommandName = "Last";
Last.Font.Underline = false;
tc.Controls.Add(First);
tc.Controls.Add(new LiteralControl(" "));
tc.Controls.Add(Prev);
tc.Controls.Add(new LiteralControl(" "));
if (this.PageIndex <= 0)
{
First.Enabled = Prev.Enabled = false;
}
else
{
First.Enabled = Prev.Enabled = true;
}
tc.Controls.Add(Next);
tc.Controls.Add(new LiteralControl(" "));
tc.Controls.Add(Last);
tc.Controls.Add(new LiteralControl(" "));
if (this.PageIndex >= PageCount - 1)
{
Next.Enabled = Last.Enabled = false;
}
else
{
Next.Enabled = Last.Enabled = true;
}
#endregion
#region 显示总记录数 每页记录数 当前页数/总页数 /和加TextBox Button DropDownList控件
tc.Controls.Add(new LiteralControl((PageIndex + 1).ToString()));
tc.Controls.Add(new LiteralControl("/"));
tc.Controls.Add(new LiteralControl(PageCount.ToString()));
tc.Controls.Add(new LiteralControl(" 共<b>"));
tc.Controls.Add(new LiteralControl(SummaryCount.ToString()));
tc.Controls.Add(new LiteralControl("</b>条记录 到"));
//添加输入框和按纽
TextBox txbDigit = new TextBox();
txbDigit.ID = "txbDigit";
txbDigit.Style.Add("width", "18px");
//txbDigit.Style.Add("height", "20px"); //height:20px;
tc.Controls.Add(txbDigit);
Button btnGoto = new Button();
btnGoto.ID = "btnGoto";
btnGoto.Text = "Go";
btnGoto.ToolTip = "查询";
btnGoto.Style.Add("cursor", "hand");
//btnGoto.Style.Add("height", "25px");
btnGoto.CommandName = "goto";
btnGoto.CausesValidation = false;
tc.Controls.Add(btnGoto);
tc.Controls.Add(new LiteralControl(" 每页显示"));
//使用下拉框来进行
DropDownList ddlList = new DropDownList();
ddlList.ID = "ddlList";
ddlList.Items.Add(new ListItem("10", "10"));
ddlList.Items.Add(new ListItem("20", "20"));
ddlList.Items.Add(new ListItem("30", "30"));
ddlList.Items.Add(new ListItem("40", "40"));
ddlList.Items.Add(new ListItem("50", "50"));
ddlList.SelectedValue = PageSize.ToString(); //显示行数
ddlList.Style.Add("Width", "40px");
ddlList.AutoPostBack = true; //触发其响应事件
ddlList.SelectedIndexChanged += new EventHandler(DropDownList_SelectChanged);
tc.Controls.Add(ddlList);
tc.Controls.Add(new LiteralControl("条记录"));
#endregion
tc.ColumnSpan = this.Columns.Count;
PagerStyle.HorizontalAlign = HorizontalAlign.Right; // 分页栏显示在右边
e.Row.Controls.Add(tc);
}
#endregion
base.OnRowCreated(e);
}
#endregion
#region LinkButton和button的事件处理
protected override void OnRowCommand(GridViewCommandEventArgs e)
{
//处理每个控件的事件,让前台来进行接收处理
GridViewRow pagerRow = this.BottomPagerRow;
LinkButton lbFirst = (LinkButton)pagerRow.FindControl("First");
LinkButton lbPrev = (LinkButton)pagerRow.FindControl("Prev");
LinkButton lbNext = (LinkButton)pagerRow.FindControl("Next");
LinkButton lbLast = (LinkButton)pagerRow.FindControl("Last");
bool flag = true; //通过使用标识来判断
switch (e.CommandName)
{
case "First":
this.PageIndex = 0;
lbFirst.Enabled = lbPrev.Enabled = false;
lbNext.Enabled = lbLast.Enabled = true;
flag = true;
break;
case "Prev":
if (PageIndex >= 1)
{
this.PageIndex = PageIndex - 1;
lbFirst.Enabled = lbPrev.Enabled = true;
}
else
{
lbFirst.Enabled = lbPrev.Enabled = true;
}
lbNext.Enabled = lbLast.Enabled = true;
flag = true;
break;
case "Next":
if (PageIndex < PageCount - 1)
{
this.PageIndex = PageIndex + 1;
lbNext.Enabled = lbLast.Enabled = true;
}
else
{
lbNext.Enabled = lbLast.Enabled = false;
}
lbFirst.Enabled = lbPrev.Enabled = true;
flag = true;
break;
case "Last":
this.PageIndex = PageCount - 1;
lbFirst.Enabled = lbPrev.Enabled = true;
lbNext.Enabled = lbLast.Enabled = false;
flag = true;
break;
case "goto":
TextBox txbContent = (TextBox)this.BottomPagerRow.FindControl("txbDigit");
//使用正则表达式,验证输入的值
Match match = Regex.Match(txbContent.Text.Trim(), @"^[1-" + PageCount + "]$");
if (match.Success)
{
this.PageIndex = Convert.ToInt32(match.Value) - 1;
flag = true;
}
else
{
flag = false;
}
break;
}
//调用前台事件
if (flag)
{
//重新加载数据
EventArgs ea = new EventArgs();
DataBindingClick(this, ea);
}
base.OnRowCommand(e);
}
#endregion
#region 触发更新事件,用于LinkButtn和Button是触发事件
public event EventHandler ButtonClick;
protected virtual void DataBindingClick(object sender, EventArgs e)
{
if (ButtonClick != null)
{
ButtonClick(sender, e);
}
}
#endregion
#region dropdownlist的事件处理
public event SelectNumberEventHandler SelectNumber;
protected virtual void SelectNumberChanged(SelectNumberEventArgs e)
{
if (SelectNumber != null)
{
SelectNumber(e);
}
}
//把DropDownList选择得值返回给前台,让其进行操作,存入一个类中
protected void DropDownList_SelectChanged(object sender, EventArgs e)
{
DropDownList ddlSelect = sender as DropDownList;
SelectNumberEventArgs selectNum = new SelectNumberEventArgs(Convert.ToInt32(ddlSelect.SelectedValue));
SelectNumberChanged(selectNum);
}
#endregion
/// <summary>
/// 注册控件有scriptManager的页面,这样几个控件才能激活,它必须在Gridview绑定后才能注册
/// </summary>
/// <param name="smRegister">注册的对象</param>
public void RegisterControl(ScriptManager smRegister)
{
try
{
//注册触发控件
GridViewRow gvr = this.BottomPagerRow;
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("First"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("Prev"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("Next"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("Last"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("btnGoto"));
smRegister.RegisterAsyncPostBackControl(gvr.Cells[0].FindControl("ddlList"));
}
catch
{ }
}
}
/// <summary>
/// 自定义分页相关
/// </summary>
public class Paging
{
/// <summary>
/// 自定义分页样式
/// </summary>
public enum PagingStyleCollection
{
/// <summary>
/// 不用自定义分页样式
/// </summary>
None,
/// <summary>
/// 默认自定义分页样式
/// </summary>
Default
}
}
//用来存储dropdownList选择的数据
public class SelectNumberEventArgs: EventArgs
{
private int selectDigit;
public SelectNumberEventArgs(int digit)
{
selectDigit = digit;
}
public int SelectNum
{
get
{
return selectDigit;
}
}
}
}
直接引用该uGridView,如果要想产生分页效果,那么几个属性必须设置
一个是AllowPaging="True" 和PagingStyle="default"
然后在HTML代码中加入样式,是指“首页、尾页”的显示样式
<PagerSettings
FirstPageText="<font face='webdings'>9</font>" PreviousPageText="<font face='webdings'>3</font>"
NextPageText="<font face='webdings'>4</font>" LastPageText="<font face='webdings'>:</font>" />
然后对该uGridView两个事件进行代码操作,主要就是重新绑定数据源
//加载客户信息
private void setGridView(int pageSize)
{
try
{
//根据选择条件得到数据
clsST_JC_KHXX[] st_xx=ywJC_KHXX.stSelectOuterKeyJC_KHXX("2");
if (st_xx == null)
{
uGridView1.DataSource = null;
uGridView1.DataBind();
return;
}
//绑定数据源共有多少条记录,并在分页栏中显示
uGridView1.SummaryCount = st_xx.Length;
//判断是否有每页显示的记录有否改变,如果改变必须把值直接赋给PageSize
if (pageSize != 0)
{
uGridView1.PageSize = pageSize;
}
uGridView1.DataSource = st_xx;
uGridView1.DataBind();
}
catch (Exception ex)
{
throw ex;
}
}
双击uGridView中ButtonClick(LinkButton、Button的触发)和SelectNumber(DropDownList)事件
在ButtonClick事件下直接重新绑定
protected void GridView1_ButtonClick(object sender, EventArgs e)
{
setGridView(0);
}
在SelectNumber事件下
protected void GridView1_SelectNumber(ZLDK.JXGL.WebControls.SelectNumberEventArgs e)
{
setGridView(e.SelectNum); //e.SelectNum是dropDownList选择的值, //ZLDK.JXGL.WebControls是命名控件下类SelectNumberEventArgs
}
相关文章推荐
- 自定义Gridview控件的分页功能
- ASP.NET2.0 GridView控件两大常见问题解决方案:自定义数据分页,类似DataGrid的VirtualItemCount功能
- 扩展GridView控件(10) - 自定义分页样式
- 对《自定义GridView分页模板中页码Button的实现》中程序的改进,追加显示空行功能
- [GridView控件]自定义分页
- 一个集成自定义分页和列可拖动的GridView控件
- C# 自定义分页控件
- GridView控件自定义分页详解
- ASP.NET技巧:GridView控件自定义分页详解第三页
- Android GridView控件分页自定义
- 扩展GridView控件(10) - 自定义分页样式
- 5.1奉献【源码】一个集成自定义分页和列可拖动的GridView控件
- GridView控件的绑定分页功能
- 扩展GridView控件(10) - 自定义分页样式
- GridView控件实现分页功能
- GridView控件自定义分页详解
- 自定义空间,c#分页控件
- GridView控件自定义分页详解
- [GridView控件]自定义分页
- 自定义GridView的分页功能