明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

使用純粹的asp+語言制作的欄目管理(二)

[摘要]http://www.asp888.net 豆腐技術(shù)站 昨天我們看了 豆腐利用 asp.net 的特性作的 欄目管理的程序的第一部分,在今天的第二部分中,豆腐將把 昨天我們錄入界面錄入的數(shù)據(jù)顯示出來...
http://www.asp888.net 豆腐技術(shù)站

昨天我們看了 豆腐利用 asp.net 的特性作的 欄目管理的程序的第一部分,在今天的第二部分中,豆腐
將把 昨天我們錄入界面錄入的數(shù)據(jù)顯示出來,并且在這個部分,專門做了一個 用來進(jìn)行分頁管理的一個
Pagelet,通過這個pagelet 我們將 Select 出來的記錄進(jìn)行了分頁的處理,并且復(fù)習(xí)了我們以前的文章如何在asp+ 中使用自定義的pagelet
通過這個程序,我們將會學(xué)習(xí)到在 asp.net 的編程中的一些中級的技術(shù)(其實更為高級的技術(shù),我們在目前)
的學(xué)習(xí)和應(yīng)用的過程中,似乎還沒有用到!不對,不對,是豆腐沒有用到:)
下面我們首先來看看我們作的這個ascx文件:也叫用戶自定義組件文件
c.ascx:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL" %>
<% @ Import Namespace="System.Drawing" %>
<script runat=server language="C#">
public SQLDataReader sRead; //這個是綁定的數(shù)據(jù)
public int intPageCount=5; //這個是每頁需要顯示的數(shù)據(jù)的多少 默認(rèn)是10
public int intRecStart=0; //這個是當(dāng)前數(shù)據(jù)的 起使位置, 默認(rèn)是 0
public int intCurrentRow=0; //當(dāng)前的Row 指針?biāo)诘奈恢?br>public int intRecCount; //當(dāng)前的這個查詢的記錄總數(shù)

public void DataBind(){
int i;
for(i=0;i<intRecStart;i++){
sRead.Read();
}
}
public String GetVal(String strName){
sRead.Read();
return sRead[strName].ToString();
}
public bool MyRead(){
if(!sRead.Read())
return false;
if(intCurrentRow==intPageCount)
return false;
intCurrentRow++;
return true;
}
public void PageBar(){
TableCell c;
TableRow r = new TableRow();
c= new TableCell();
int ii=intRecCount;
//(ArrayList)sRead;
String strWrite;
if(intRecStart==0){
strWrite="首頁 上頁";
}
else
{
strWrite="<a href='c.aspx?start=0'>首頁</a> <a href='c.aspx?start=" + (intRecStart-intPageCount).ToString() + "'>上頁</a>";
}
if((intRecStart+intPageCount)>ii){
strWrite= strWrite + " 首頁 上頁";
}
else{
strWrite= strWrite + "<a href='c.aspx?start=" + (intRecStart+intPageCount).ToString() +"'>下頁</a> <a href='c.aspx?start=" + (intRecStart+intPageCount).ToString() + "'>末頁</a>";
}
c.Controls.Add(new LiteralControl(strWrite));
r.Cells.Add(c);

c = new TableCell(); //生成新的一列
c.Controls.Add(new LiteralControl("共有記錄" + ii.ToString()));
r.Cells.Add(c);

Table1.Rows.Add(r);
}
</script>
<asp:Table id="Table1" GridLines="Both" HorizontalAlign="Center" Font-Name="Verdana" Font-Size="8pt" width=100% Runat="server"/>
然后,我們可以通過語句:
<%@ Register TagPrefix="asp888" TagName="myPageTable" Src="c.ascx" %>
可以把c.ascx 文件加入到 任意一個aspx 文件中,而且,我們可以在 aspx 文件中對 我們的這個 ascx 文件中的 public 定義的
參數(shù)進(jìn)行Get 和 Set 的操作,就如同 操作<asp:TextBox> 的屬性和方法是一樣的,大家在這里一定要特別注意
<asp888:myPageTable id="menuControl1" runat=server />,這個就是我們在 通過 <% Register >中定義的PreFix 和 TagName
來組成的,這樣我們通過這個程序,模擬了DataGrid 的 DataBind 的操作,同時也實現(xiàn)了分頁的自動化
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL" %>
<%@ Register TagPrefix="asp888" TagName="myPageTable" Src="c.ascx" %>
<script runat=server language="C#">
protected void Page_Load(Object Src, EventArgs E){
int intRecStart=Request.QueryString["start"].ToInt16();
SQLDataReader dbRead;
SQLCommand dbComm;
String strSQL;
String strConn;
SQLConnection conn;
Hashtable Cfg=new Hashtable();
Cfg = (Hashtable)Context.GetConfig("appsettings");
strConn=Cfg["Conn"].ToString();
conn = new SQLConnection(strConn);
//首先得到記錄總數(shù)
strSQL="select count(*) from lanmu";
dbComm = new SQLCommand(strSQL, conn);
dbComm.ActiveConnection.Open();
dbComm.Execute(out dbRead);
dbRead.Read();
int intRecCount=dbRead.GetInt32(0);
dbComm.ActiveConnection.Close();
strSQL="select * from lanmu order by id desc";
dbComm = new SQLCommand(strSQL, conn);
dbComm.ActiveConnection.Open();
dbComm.Execute(out dbRead);
menuControl1.sRead=dbRead;
menuControl1.intRecStart=intRecStart;
menuControl1.intRecCount=intRecCount;
menuControl1.DataBind();
menuControl1.PageBar();
WriteTable();
}
void WriteTable(){
TableCell c;
TableRow r;


r = new TableRow(); //生成新的一行
c = new TableCell(); //生成新的一列
c.Controls.Add(new LiteralControl("序號"));
r.Cells.Add(c);

c = new TableCell(); //生成新的一列
c.Controls.Add(new LiteralControl("文章標(biāo)題"));
r.Cells.Add(c);

c = new TableCell(); //生成新的一列
c.Controls.Add(new LiteralControl("閱讀次數(shù)"));
r.Cells.Add(c);
tableTest.Rows.Add(r);
while(menuControl1.MyRead()){
r = new TableRow(); //生成新的一行

c = new TableCell(); //生成新的一列
c.Controls.Add(new LiteralControl(menuControl1.sRead["id"].ToString()));
r.Cells.Add(c);

//欄目的標(biāo)題用 HyperLink 表示
HyperLink h=new HyperLink();
h.Text=menuControl1.sRead["title"].ToString();
h.NavigateUrl="viewarticle.aspx?id=" + menuControl1.sRead["id"].ToString();
c = new TableCell(); //生成新的一列
c.Controls.Add(h);
r.Cells.Add(c);

c = new TableCell(); //生成新的一列
c.Controls.Add(new LiteralControl(menuControl1.sRead["viewnum"].ToString()));
r.Cells.Add(c);

tableTest.Rows.Add(r);
}
return;
}
</script>
<html>
<head>
</head>

<body>
<asp888:myPageTable id="menuControl1" runat=server />
<asp:Table id="tableTest" width=100% GridLines="Both" Runat="server" HorizontalAlign="Center" Font-Name="Verdana" Font-Size="8pt" CellSpacing=0 />
</body>
</html>
當(dāng)然,由于時間的關(guān)系,我的這個程序有的功能實現(xiàn)的還是比較粗糙和簡單的,相信大家只要在這個程序
的基礎(chǔ)上 舉一反三,一定可以學(xué)習(xí)到很多很多的知識。同志們,努力吧!