<!--[if !supportLists]-->一、<!--[endif]-->運(yùn)用自定控件
網(wǎng)站一般都有很多模塊都是類似的,例如上下頁翻轉(zhuǎn),在一個(gè)網(wǎng)頁顯示一個(gè)文件列表等。這時(shí)就可以把這些網(wǎng)站寫成一些自定義控件來實(shí)現(xiàn)。在這次網(wǎng)站開發(fā)過程中,我自己開發(fā)了六個(gè)自定控件,然后大大的減少了代碼量和后期的維護(hù)工作。如下是一個(gè)上下頁翻轉(zhuǎn)控件源代碼:
頁面代碼:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="ChangePage.ascx.cs" Inherits="quyuan.userControls.ChangePage" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<TABLE id="Table1" cellSpacing="1" cellPadding="1" width="500" border="0" style="FONT-SIZE: 12px"
align="center">
<TR>
<TD vAlign="middle" align="center"><FONT face="宋體">
<asp:LinkButton id="lbl_first" runat="server">首頁</asp:LinkButton></FONT></TD>
<TD vAlign="middle" align="center">
<asp:LinkButton id="lbl_forward" runat="server">上一頁</asp:LinkButton></TD>
<TD vAlign="middle" align="center">
<asp:LinkButton id="lbl_next" runat="server">下一頁</asp:LinkButton></TD>
<TD vAlign="middle" align="center">
<asp:LinkButton id="lbl_last" runat="server">末頁</asp:LinkButton></TD>
<TD vAlign="middle" align="center">
<asp:Label id="lbl_now" runat="server">1</asp:Label><FONT face="宋體">/
<asp:Label id="lbl_count" runat="server">1</asp:Label>頁</FONT></TD>
<TD vAlign="middle" align="center"><FONT face="宋體">
<asp:Label id="lbl_size" runat="server">1</asp:Label>條/頁</FONT></TD>
<TD vAlign="middle" align="center"><FONT face="宋體"><FONT face="宋體">共
<asp:Label id="lbl_sum" runat="server"></asp:Label>條記錄</FONT></FONT></TD>
<TD vAlign="middle" align="center">
<asp:Label id="tabel1" runat="server">跳轉(zhuǎn)到第</asp:Label>
<asp:DropDownList id="drp_page" runat="server" Width="50px" AutoPostBack="True"></asp:DropDownList>
<asp:Label id="Label2" runat="server">頁</asp:Label></TD>
</TR>
</TABLE>
<FONT face="宋體"></FONT>
源程序代碼:
namespace quyuan.userControls
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
/// <summary>
/// ChangePage 的摘要說明。
/// </summary>
public class ChangePage : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.LinkButton lbl_first;
protected System.Web.UI.WebControls.LinkButton lbl_forward;
protected System.Web.UI.WebControls.LinkButton lbl_next;
protected System.Web.UI.WebControls.Label lbl_now;
protected System.Web.UI.WebControls.Label lbl_count;
protected System.Web.UI.WebControls.Label lbl_sum;
protected System.Web.UI.WebControls.Label lbl_size;
protected System.Web.UI.WebControls.Label tabel1;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.LinkButton lbl_last;
private int crrentPage;
private System.Web.UI.WebControls.Table controlTable;
private int size;
protected System.Web.UI.WebControls.DropDownList drp_page;
private DataSet ds;
private int pageCount;
private ListItem item;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此處放置用戶代碼以初始化頁面
if(!Page.IsPostBack)
initPage();
}
#region Web 窗體設(shè)計(jì)器生成的代碼
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 該調(diào)用是 ASP.NET Web 窗體設(shè)計(jì)器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 設(shè)計(jì)器支持所需的方法 - 不要使用代碼編輯器
/// /// 修改此方法的內(nèi)容。
/// </summary>
private void InitializeComponent()
{
this.lbl_first.Click += new System.EventHandler(this.lbl_first_Click);
this.lbl_forward.Click += new System.EventHandler(this.lbl_forward_Click);
this.lbl_next.Click += new System.EventHandler(this.lbl_next_Click);
this.lbl_last.Click += new System.EventHandler(this.lbl_last_Click);
this.drp_page.SelectedIndexChanged += new System.EventHandler(this.drp_page_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void initPage()
{
this.crrentPage = 1;
this.lbl_now.Text = this.crrentPage.ToString();//顯示下當(dāng)前頁碼
//顯示總頁數(shù)
if(ds.Tables[0].Rows.Count%size == 0)
this.pageCount = ds.Tables[0].Rows.Count/size;
else
this.pageCount = ds.Tables[0].Rows.Count/size + 1;
this.lbl_count.Text = this.pageCount.ToString();
//每一頁顯示列數(shù)
this.lbl_size.Text = this.size.ToString();
//總的記錄數(shù)
this.lbl_sum.Text = ds.Tables[0].Rows.Count.ToString();
//綁定頁碼
for(int i=1;i<= pageCount;i++)
{
item = new ListItem(i.ToString(),i.ToString());
this.drp_page.Items.Insert(i-1,item);
}
}
/// <summary>
/// 跳轉(zhuǎn)到首頁
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbl_first_Click(object sender, System.EventArgs e)
{
//當(dāng)記錄時(shí),選定到指定頁
if(this.drp_page.Items.Count != 0)
{
this.crrentPage = Int32.Parse(this.lbl_now.Text.Trim());
//跳轉(zhuǎn)到首
Utility.FirstPage(this.controlTable,ds,this.size,ref crrentPage);
//更新當(dāng)前頁碼
this.lbl_now.Text = crrentPage.ToString();
this.drp_page.SelectedIndex = crrentPage-1;
}
}
/// <summary>
/// 上一頁
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbl_forward_Click(object sender, System.EventArgs e)
{
//當(dāng)記錄時(shí),選定到指定頁
if(this.drp_page.Items.Count != 0)
{
//取當(dāng)前頁面
this.crrentPage = Int32.Parse(this.lbl_now.Text.Trim());
//跳轉(zhuǎn)到上一頁
Utility.ForwardPage(this.controlTable,ds,this.size,ref crrentPage);
//更新當(dāng)前頁碼
this.lbl_now.Text = crrentPage.ToString();
this.drp_page.SelectedIndex = crrentPage-1;
}
}
/// <summary>
/// 下一頁
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbl_next_Click(object sender, System.EventArgs e)
{
//當(dāng)記錄時(shí),選定到指定頁
if(this.drp_page.Items.Count != 0)
{
//取當(dāng)前頁面
this.crrentPage = Int32.Parse(this.lbl_now.Text.Trim());
//跳轉(zhuǎn)到下一頁
Utility.NextPage(this.controlTable,ds,this.size,ref crrentPage);
//更新當(dāng)前頁碼
this.lbl_now.Text = crrentPage.ToString();
this.drp_page.SelectedIndex = crrentPage-1;
}
}
/// <summary>
/// 末頁
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbl_last_Click(object sender, System.EventArgs e)
{
//當(dāng)記錄時(shí),選定到指定頁
if(this.drp_page.Items.Count != 0)
{
//取當(dāng)前頁面
this.crrentPage = Int32.Parse(this.lbl_now.Text.Trim());
//跳轉(zhuǎn)到末頁
Utility.LastPage(this.controlTable,ds,this.size,ref crrentPage);
//更新當(dāng)前頁碼
this.lbl_now.Text = crrentPage.ToString();
this.drp_page.SelectedIndex = crrentPage-1;
}
}
/// <summary>
/// 跳轉(zhuǎn)到指定頁面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void drp_page_SelectedIndexChanged(object sender, System.EventArgs e)
{
//取當(dāng)前頁面
//this.Label2.Text = "here!";
this.crrentPage = this.drp_page.SelectedIndex+1;
//跳轉(zhuǎn)到指定頁
Utility.SpeceilPage(this.controlTable,ds,this.size,ref crrentPage);
//更新當(dāng)前頁碼
this.lbl_now.Text = crrentPage.ToString();
this.drp_page.SelectedIndex = crrentPage-1;
}
/// <summary>
/// 指定或獲取據(jù)源
/// </summary>
public DataSet DataSource
{
get{ return ds;}
set{ ds = value;}
}
/// <summary>
/// 指定或獲取操作表格
/// </summary>
public System.Web.UI.WebControls.Table ControlTable
{
get{ return controlTable;}
set{ controlTable = value;}
}
/// <summary>
/// 指定或獲取操作表格
/// </summary>
public int ListSize
{
get{ return size;}
set{ size = value;}
}
}
}
寫自定義控件心得,實(shí)際上自己定控件也可以看成就是一個(gè)類,在實(shí)用它的時(shí)候,實(shí)例化一個(gè)就可以了,對(duì)于自定義的屬性,若要取值賦值就應(yīng)該提供get 、set方法。
寫這個(gè)控件的時(shí)候遇到一個(gè)問題:當(dāng)點(diǎn)擊dropdownlist的index改變的時(shí)候,SelectedIndexChanged的事件不會(huì)馬上就觸發(fā),而是要等下一次頁面更新的時(shí)候才會(huì)觸發(fā),解決方法就是將dropdownlist的AutoPostBask屬性設(shè)置成true即可,當(dāng)時(shí)知道了馬上就暈倒了。
<!--[if !supportLists]-->二、<!--[endif]-->應(yīng)該自定義控件時(shí),注意事件順序和頁面加載順序,當(dāng)一個(gè)事件要觸發(fā)運(yùn)行前,其操作對(duì)象應(yīng)該已經(jīng)要先加載到頁面中,當(dāng)使用自定義控件的時(shí)候,因?yàn)槊看慰丶羰呛笈_(tái)添加的話,則每次頁面刷新都要重新加載一次,如些若有這個(gè)控件的事件或是操作這個(gè)控件的屬性則要注意必須先加載這個(gè)控件。
<!--[if !supportLists]-->三、<!--[endif]-->注意CSS的使用,這樣會(huì)簡(jiǎn)化很多的工作。
聯(lián)系客服