C#实现网站总结
最近这十天用C#做了个网站,今天终于交付了,把这段时间的心得写写,也是一种纪念。
一、运用自定控件
网站一般都有很多模块都是类似的,例如上下页翻转,在一个网页显示一个文件列表等。这时就可以把这些网站写成一些自定义控件来实现。在这次网站开发过程中,我自己开发了六个自定控件,然后大大的减少了代码量和后期的维护工作。如下是一个上下页翻转控件源代码:
页面代码:
<%@ 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">跳转到第</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 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// /// 修改此方法的内容。
/// </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();//显示下当前页码
//显示总页数
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();
//每一页显示列数
this.lbl_size.Text = this.size.ToString();
//总的记录数
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>
/// 跳转到首页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbl_first_Click(object sender, System.EventArgs e)
{
//当记录时,选定到指定页
if(this.drp_page.Items.Count != 0)
{
this.crrentPage = Int32.Parse(this.lbl_now.Text.Trim());
//跳转到首
Utility.FirstPage(this.controlTable,ds,this.size,ref crrentPage);
//更新当前页码
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)
{
//当记录时,选定到指定页
if(this.drp_page.Items.Count != 0)
{
//取当前页面
this.crrentPage = Int32.Parse(this.lbl_now.Text.Trim());
//跳转到上一页
Utility.ForwardPage(this.controlTable,ds,this.size,ref crrentPage);
//更新当前页码
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)
{
//当记录时,选定到指定页
if(this.drp_page.Items.Count != 0)
{
//取当前页面
this.crrentPage = Int32.Parse(this.lbl_now.Text.Trim());
//跳转到下一页
Utility.NextPage(this.controlTable,ds,this.size,ref crrentPage);
//更新当前页码
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)
{
//当记录时,选定到指定页
if(this.drp_page.Items.Count != 0)
{
//取当前页面
this.crrentPage = Int32.Parse(this.lbl_now.Text.Trim());
//跳转到末页
Utility.LastPage(this.controlTable,ds,this.size,ref crrentPage);
//更新当前页码
this.lbl_now.Text = crrentPage.ToString();
this.drp_page.SelectedIndex = crrentPage-1;
}
}
/// <summary>
/// 跳转到指定页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void drp_page_SelectedIndexChanged(object sender, System.EventArgs e)
{
//取当前页面
//this.Label2.Text = "here!";
this.crrentPage = this.drp_page.SelectedIndex+1;
//跳转到指定页
Utility.SpeceilPage(this.controlTable,ds,this.size,ref crrentPage);
//更新当前页码
this.lbl_now.Text = crrentPage.ToString();
this.drp_page.SelectedIndex = crrentPage-1;
}
/// <summary>
/// 指定或获取据源
/// </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;}
}
}
}
写自定义控件心得,实际上自己定控件也可以看成就是一个类,在实用它的时候,实例化一个就可以了,对于自定义的属性,若要取值赋值就应该提供get 、set方法。
写这个控件的时候遇到一个问题:当点击dropdownlist的index改变的时候,SelectedIndexChanged的事件不会马上就触发,而是要等下一次页面更新的时候才会触发,解决方法就是将dropdownlist的AutoPostBask属性设置成true即可,当时知道了马上就晕倒了。
二、应该自定义控件时,注意事件顺序和页面加载顺序,当一个事件要触发运行前,其操作对象应该已经要先加载到页面中,当使用自定义控件的时候,因为每次控件若是后台添加的话,则每次页面刷新都要重新加载一次,如些若有这个控件的事件或是操作这个控件的属性则要注意必须先加载这个控件。
三、注意CSS的使用,这样会简化很多的工作。