http://www.asp888.net 豆腐技术站
昨天我们看了 豆腐利用 asp.net 的特性作的 栏目管理的程序的第一部分,在今天的第二部分中,豆腐
将把 昨天我们录入界面录入的数据显示出来,并且在这个部分,专门做了一个 用来进行分页管理的一个
Pagelet,通过这个pagelet 我们将 Select 出来的记录进行了分页的处理,并且复习了我们以前的文章如何在asp+ 中使用自定义的pagelet
通过这个程序,我们将会学习到在 asp.net 的编程中的一些中级的技术(其实更为高级的技术,我们在目前)
的学习和应用的过程中,似乎还没有用到!不对,不对,是豆腐没有用到:)
下面我们首先来看看我们作的这个ascx文件:也叫用户自定义组件文件
c.ascx:
1@ Import Namespace="System.Data"
2
3@ Import Namespace="System.Data.SQL"
4
5 @ Import Namespace="System.Drawing"
6
7<script language="C#" runat="server">
8public SQLDataReader sRead; //这个是绑定的数据
9public int intPageCount=5; //这个是每页需要显示的数据的多少 默认是10
10public int intRecStart=0; //这个是当前数据的 起使位置, 默认是 0
11public int intCurrentRow=0; //当前的Row 指针所在的位置
12public int intRecCount; //当前的这个查询的记录总数
13
14public void DataBind(){
15int i;
16for(i=0;i<intRecStart;i++){
17sRead.Read();
18}
19}
20public String GetVal(String strName){
21sRead.Read();
22return sRead[strName].ToString();
23}
24public bool MyRead(){
25if(!sRead.Read())
26return false;
27if(intCurrentRow==intPageCount)
28return false;
29intCurrentRow++;
30return true;
31}
32public void PageBar(){
33TableCell c;
34TableRow r = new TableRow();
35c= new TableCell();
36int ii=intRecCount;
37//(ArrayList)sRead;
38String strWrite;
39if(intRecStart==0){
40strWrite="首页 上页";
41}
42else
43{
44strWrite="<a href='c.aspx?start=0'>首页</a> <a href='c.aspx?start=" + (intRecStart-intPageCount).ToString() + "'>上页</a>";
45}
46if((intRecStart+intPageCount)>ii){
47strWrite= strWrite + " 首页 上页";
48}
49else{
50strWrite= strWrite + "<a href='c.aspx?start=" + (intRecStart+intPageCount).ToString() +"'>下页</a> <a href='c.aspx?start=" + (intRecStart+intPageCount).ToString() + "'>末页</a>";
51}
52c.Controls.Add(new LiteralControl(strWrite));
53r.Cells.Add(c);
54
55c = new TableCell(); //生成新的一列
56c.Controls.Add(new LiteralControl("共有记录" + ii.ToString()));
57r.Cells.Add(c);
58
59Table1.Rows.Add(r);
60}
61</script>
62
63<asp:table font-name="Verdana" font-size="8pt" gridlines="Both" horizontalalign="Center" id="Table1" runat="server" width="100%"></asp:table>
然后,我们可以通过语句:
1@ Register TagPrefix="asp888" TagName="myPageTable" Src="c.ascx"
可以把c.ascx 文件加入到 任意一个aspx 文件中,而且,我们可以在 aspx 文件中对 我们的这个 ascx 文件中的 public 定义的
参数进行Get 和 Set 的操作,就如同 操作
1<asp:textbox> 的属性和方法是一样的,大家在这里一定要特别注意
2<asp888:mypagetable id="menuControl1" runat="server"></asp888:mypagetable>,这个就是我们在 通过 ```
3 Register &gt;中定义的PreFix 和 TagName
4来组成的,这样我们通过这个程序,模拟了DataGrid 的 DataBind 的操作,同时也实现了分页的自动化
5&lt;%@ Import Namespace="System.Data"
6
7@ Import Namespace="System.Data.SQL"
8
9@ Register TagPrefix="asp888" TagName="myPageTable" Src="c.ascx"
10
11<script language="C#" runat="server">
12protected void Page_Load(Object Src, EventArgs E){
13int intRecStart=Request.QueryString["start"].ToInt16();
14SQLDataReader dbRead;
15SQLCommand dbComm;
16String strSQL;
17String strConn;
18SQLConnection conn;
19Hashtable Cfg=new Hashtable();
20Cfg = (Hashtable)Context.GetConfig("appsettings");
21strConn=Cfg["Conn"].ToString();
22conn = new SQLConnection(strConn);
23//首先得到记录总数
24strSQL="select count(*) from lanmu";
25dbComm = new SQLCommand(strSQL, conn);
26dbComm.ActiveConnection.Open();
27dbComm.Execute(out dbRead);
28dbRead.Read();
29int intRecCount=dbRead.GetInt32(0);
30dbComm.ActiveConnection.Close();
31strSQL="select * from lanmu order by id desc";
32dbComm = new SQLCommand(strSQL, conn);
33dbComm.ActiveConnection.Open();
34dbComm.Execute(out dbRead);
35menuControl1.sRead=dbRead;
36menuControl1.intRecStart=intRecStart;
37menuControl1.intRecCount=intRecCount;
38menuControl1.DataBind();
39menuControl1.PageBar();
40WriteTable();
41}
42void WriteTable(){
43TableCell c;
44TableRow r;
45
46
47r = new TableRow(); //生成新的一行
48c = new TableCell(); //生成新的一列
49c.Controls.Add(new LiteralControl("序号"));
50r.Cells.Add(c);
51
52c = new TableCell(); //生成新的一列
53c.Controls.Add(new LiteralControl("文章标题"));
54r.Cells.Add(c);
55
56c = new TableCell(); //生成新的一列
57c.Controls.Add(new LiteralControl("阅读次数"));
58r.Cells.Add(c);
59tableTest.Rows.Add(r);
60while(menuControl1.MyRead()){
61r = new TableRow(); //生成新的一行
62
63c = new TableCell(); //生成新的一列
64c.Controls.Add(new LiteralControl(menuControl1.sRead["id"].ToString()));
65r.Cells.Add(c);
66
67//栏目的标题用 HyperLink 表示
68HyperLink h=new HyperLink();
69h.Text=menuControl1.sRead["title"].ToString();
70h.NavigateUrl="viewarticle.aspx?id=" + menuControl1.sRead["id"].ToString();
71c = new TableCell(); //生成新的一列
72c.Controls.Add(h);
73r.Cells.Add(c);
74
75c = new TableCell(); //生成新的一列
76c.Controls.Add(new LiteralControl(menuControl1.sRead["viewnum"].ToString()));
77r.Cells.Add(c);
78
79tableTest.Rows.Add(r);
80}
81return;
82}
83</script>
84<html>
85<head>
86</head>
87<body>
88<asp888:mypagetable id="menuControl1" runat="server"></asp888:mypagetable>
89<asp:table cellspacing="0" font-name="Verdana" font-size="8pt" gridlines="Both" horizontalalign="Center" id="tableTest" runat="server" width="100%"></asp:table>
90</body>
91</html>
92当然,由于时间的关系,我的这个程序有的功能实现的还是比较粗糙和简单的,相信大家只要在这个程序
93的基础上 举一反三,一定可以学习到很多很多的知识。同志们,努力吧!</asp:textbox>