前一阵子辅导实习生做一个学生管理系统的雏形,发现他们对自定义控件的理解不是很好,所以今天得闲就把分页控件的制作一步步讲解出来,也给自己做个巩固。
一、自定义分页控件的外观(这个很简单,直接拖拽控件就可以了)
linkButton 控件要有onclick事件
dropdown控件要有OnSelectedIndexChanged事件,且autopostback为true
二、定义事件和委托
public delegate void OnPageIndexChangedDelegate(int pageIndex);
[Description("页面跳转事件")]
[Browsable(true)]
public event OnPageIndexChangedDelegate OnPageIndexChanged = delegate { };
三、定义相关属性
//页码
public int PageSize
{
get
{
if (ViewState["PageSize"] == null)
{
ViewState["PageSize"] =5;
}
return (int)ViewState["PageSize"];
}
set
{
ViewState["PageSize"] = value;
}
}
//记录数
public int RecordCount
{
get
{
if (ViewState["RecordCount"] == null)
{
ViewState["RecordCount"] = 0;
}
return (int)ViewState["RecordCount"];
}
set { ViewState["RecordCount"] = value; }
}
//页数
public int PageCount
{
get { return (int)(Math.Ceiling(RecordCount / (double)PageSize)); }
}
//当前页
public int CurrentPageIndex
{
get
{
if (ViewState["CurrentPageIndex"] == null)
{
ViewState["CurrentPageIndex"] = 1;
}
return (int)ViewState["CurrentPageIndex"];
}
set { ViewState["CurrentPageIndex"] = value; }
}
四、相关方法
1、在自定义控件的page_load事件中初始化控件的值
2、定义public方法Bind()
如果recordcount为0的时候,四个linkbutton按钮全部不可以用。
如果pageCount小于1的时候,四个linkbutton按钮全部不可以用
如果当前页为1的时候,下一页和末页不可用
如果当前页为pagecount的时候,首页和上一页不可以用。
3、四个linkbutton的onclick事件
首页:当前页码为1,调用OnPageIndexChanged
上一页:当前页面-1,调用OnPageIndexChanged
下一页:当前页面+1,调用OnPageIndexChanged
末页:当前页面为pagecount,OnPageIndexChanged
五、如何使用
1、直接把自己定义的分页控件拖拽到页面中
2、在页面的pageload中要定义分页控件的OnPageIndexChanged事件。如:
this.Pager1.OnPageIndexChanged += new pager.OnPageIndexChangedDelegate(Pager1_OnPageIndexChanged);
3、在Pager1_OnPageIndexChanged(int pageIndex)的方法中调用gridview的绑定,并且把pageindex和pagesize传过去。
4、至于分页的sql语句,或者分页的存储过程需要自己另写。
六、扩展功能
到第五步为止,一个简单的自定义分页控件已经完成,但是有的分页控件可能还有下拉列表用于选择每页显示的条数,有文本框用于跳转到指定的页码。还有些用户说中a页面中分页控件上面的文本叫“首页、上一页、下一页、末页”,在b页面中我想要控件上的文本是”<<、<、>、>>“。我总不能重新再写一个吧。
其实这些都很简单,你只要在分页控件中添加一些属性就可以了
如:改变控件上文本的内容,你可以定义一个属性叫FirstPageText,用于对首页的按钮文本进行设置,其余的依次类推
public string FirstPageText
{
get { return lnkFirstPage.Text; }
set { lnkFirstPage.Text = value; }
}
如:在文本框中输入页码,跳转到相应的页面。在textbox的TextChanged事件中对currentPageIndex赋值,然后调用OnPageIndexChanged。
注:差点忘了一点了,分页控件要继续自UserControl哦
七:总结
其实自定义控件很强大,我们要善于用自己的大脑和微软提供的开发框架。让程序在自己的手里变魔术~