现在的位置: 首页 > 综合 > 正文

一个相当独立的.通用分页控件c#源码四(downmoon收集)

2013年08月29日 ⁄ 综合 ⁄ 共 4257字 ⁄ 字号 评论关闭
public
 
class
 DefaultPagerLayout:ITemplate


{

private
 ImageButton Next;

private
 ImageButton First;

private
 ImageButton Last;

private
 ImageButton Previous;

private
 Panel Pager;


public
 DefaultPagerLayout()


{

Next 

=
 
new
 ImageButton();

First 

=
 
new
 ImageButton();

Last 

=
 
new
 ImageButton();

Previous 

=
 
new
 ImageButton();

Pager 

=
 
new
 Panel();


Next.ID

=
"
Next
"
; Next.AlternateText
=
"
下一页
"
;Next.ImageUrl
=
"
play2.gif
"
;

First.ID

=
"
First
"
; First.AlternateText
=
"
首页
"
;First.ImageUrl
=
"
play2L_dis.gif
"
;

Last.ID 

=
 
"
Last
"
; Last.AlternateText 
=
"
末页
"
;Last.ImageUrl
=
"
play2_dis.gif
"
;

Previous.ID

=
"
Previous
"
; Previous.AlternateText
=
"
上一页
"
;Previous.ImageUrl
=
"
play2L.gif
"
;

Pager.ID

=
"
Pager
"
;

}




public
 
void
 InstantiateIn(Control control)


{

control.Controls.Clear();

Table table 

=
 
new
 Table();

table.BorderWidth 

=
 Unit.Pixel(
0
);

table.CellSpacing

=
 
1
;

table.CellPadding 

=
0
;

TableRow row 

=
 
new
 TableRow();

row.VerticalAlign 

=
 VerticalAlign.Top;

table.Rows.Add(row);

TableCell cell 

=
 
new
 TableCell();

cell.HorizontalAlign 

=
 HorizontalAlign.Right;

cell.VerticalAlign 

=
 VerticalAlign.Middle;

cell.Controls.Add(First);

cell.Controls.Add(Previous);

row.Cells.Add(cell);

cell 

=
 
new
 TableCell();

cell.HorizontalAlign

=
 HorizontalAlign.Center;

cell.Controls.Add(Pager);

row.Cells.Add(cell);

cell 

=
 
new
 TableCell();

cell.VerticalAlign 

=
 VerticalAlign.Middle;

cell.Controls.Add(Next);

cell.Controls.Add(Last);

row.Cells.Add(cell);


control.Controls.Add(table);

}




}




  DefaultPagerLayout通过编程的方式提供了所有的导航元素,并将它们加入到aspx页面,不过这一次导航元素用标准的HTML表格设置了格式。现在,如果用户没有提供一个表现模板,程序将自动提供一个默认的模板。



[TemplateContainer(

typeof
(LayoutContainer))]

public
 ITemplate Layout


{

get

{
return
 (_layout 
==
 
null
)
?
 
new
 DefaultPagerLayout():_layout;}



set

{_layout 
=
value;}



}

  下面再来看看生成各个页面编号的过程。分页控件首先需要确定一些属性值,通过这些属性值来确定要生成多少不同的页面编号。

public
 
int
 CurrentPage


{

get



{

string
 cur 
=
 (
string
)ViewState[
"
CurrentPage
"
];

return
 (cur 
==
 
string
.Empty 
||
 cur 
==
null
)
?
 
1
 : 
int
.Parse(cur);

}




set



{

ViewState[

"
CurrentPage
"

=
 value.ToString();}



}





public
 
int
 PagersToShow


{

get

{
return
 _results;}



set

{_results 
=
 value;}



}





public
 
int
 ResultsToShow


{

get

{
return
 _resultsperpage;}



set

{_resultsperpage 
=
 value;}



}

  CurrentPage保存的实际上是页面编号的ViewState中的当前页面,PagersToShow方法定义的属性允许用户指定要显示多少页面,而ResultsToShow定义的属性则允许用户指定每页要显示多少记录,默认值是10。

  NumberofPagersToGenerate返回当前应当生成的页面编号的数量。

private
 
int
 PagerSequence


{

get



{

return
 Convert.ToInt32

(Math.Ceiling((

double
)CurrentPage
/
(
double
)PagersToShow));}



}





private
 
int
 NumberOfPagersToGenerate


{

get

{
return
 PagerSequence
*
PagersToShow;}



}





private
 
int
 TotalPagesToShow


{

get

{
return
 Convert.ToInt32(Math.Ceiling((
double
)TotalResults
/
(
double
)_resultsperpage));}



}




public
 
int
 TotalResults


{

get

{
return
 _builder.Adapter.TotalCount;}



}

  TotalPagesToShow方法返回要显示的总页面数量,由用户预设的ResultsToShow属性调整。
  虽然ASP.NET定义了一些默认的样式,不过对于分页控件的用户它们可能不是很实用。用户可以通过自定义样式来调整分页控件的外观。

public
 Style UnSelectedPagerStyle 

{
get
 

{
return
 UnselectedPager;}

}



public
 Style SelectedPagerStyle 

{
get
 

{
return
 SelectedPager;}

}

  UnSelectedPagerStyle提供了页面编号未选中时所用的样式,而SelectedPagerStyle提供了页面编号被选中时所用的样式。

private
 
void
 GeneratePagers(WebControl control)


{

control.Controls.Clear();

int
 pager 
=
 (PagerSequence
-
1
)
*
 PagersToShow 
+
1
;


for
 (;pager<
=
NumberOfPagersToGenerate 
&&
 pager<
=
TotalPagesToShow;pager
++
)


{

LinkButton link 

=
 
new
 LinkButton();

link.Text 

=
 pager.ToString();

link.ID 

=
 pager.ToString();

link.Click 

+=
 
new
 EventHandler(
this
.Pager_Click);

if
 (link.ID.Equals(CurrentPage.ToString()))

link.MergeStyle(SelectedPagerStyle);

else


link.MergeStyle(UnSelectedPagerStyle);


control.Controls.Add(link);

control.Controls.Add(

new
 LiteralControl(
"
 
"
));

}




}





private
 
void
 GeneratePagers()


{

GeneratePagers(Holder);

}

   GeneratePagers方法动态地创建所有页面编号,页面编号是LinkButton类型的按钮。各个页面编号的标签和ID属性通过循环赋值,同 时,点击事件被绑定到适当的事件句柄。最后,页面编号被加入到一个容器控件——在本例中是一个Panel对象。按钮ID起到了标识哪一个按钮触发点击事件 的作用。下面是事件句柄的定义:

private
 
void
 Pager_Click(
object
 sender, System.EventArgs e)


{

LinkButton button 

=
 (LinkButton) sender;

CurrentPage 

=
 
int
.Parse(button.ID);

RaiseEvent(PageChanged, 

this
,
new
 PageChangedEventArgs(CurrentPage,PagedEventInvoker.Pager));

Update();

}





private
 
void
 Next_Click(
object
 sender, System.Web.UI.ImageClickEventArgs e)


{

if
 (CurrentPage<TotalPagesToShow)

CurrentPage

++
;

RaiseEvent(PageChanged, 

this
,
new
 PageChangedEventArgs(CurrentPage,PagedEventInvoker.Next));

Update();

}





private
 
void
 Previous_Click(
object
 sender, System.Web.UI.ImageClickEventArgs e)

抱歉!评论已关闭.