http://www.asp888.net 豆腐技术站 昨天我们看了 豆腐利用 asp.net 的特性作的 栏目管理的程序的第一部分,在今天的第二部分中,豆腐 将把 昨天我们录入界面录入的数据显示出来,并且在这个部分,专门做了一个 用来进行分页管理的一个 Pagelet,通过这个pagelet 我们将 Select 出来的记录进行了分页的处理,并且复习了我们以前的文章如何在asp+ 中使用自定义的pagelet 通过这个程序,我们将会学习到在 asp.net 的编程中的一些中级的技术(其实更为高级的技术,我们在目前) 的学习和应用的过程中,似乎还没有用到!不对,不对,是豆腐没有用到:) 下面我们首先来看看我们作的这个ascx文件:也叫用户自定义组件文件 c.ascx: <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SQL" %> <% @ Import Namespace="System.Drawing" %> <script runat=server language="C#"> public SQLDataReader sRead; //这个是绑定的数据 public int intPageCount=5; //这个是每页需要显示的数据的多少 默认是10 public int intRecStart=0; //这个是当前数据的 起使位置, 默认是 0 public int intCurrentRow=0; //当前的Row 指针所在的位置 public int intRecCount; //当前的这个查询的记录总数 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 定义的 参数进行Get 和 Set 的操作,就如同 操作<asp:TextBox> 的属性和方法是一样的,大家在这里一定要特别注意 <asp888:myPageTable id="menuControl1" runat=server />,这个就是我们在 通过 <% Register >中定义的PreFix 和 TagName 来组成的,这样我们通过这个程序,模拟了DataGrid 的 DataBind 的操作,同时也实现了分页的自动化 <%@ 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); //首先得到记录总数 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("文章标题")); r.Cells.Add(c); c = new TableCell(); //生成新的一列 c.Controls.Add(new LiteralControl("阅读次数")); 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); //栏目的标题用 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> 当然,由于时间的关系,我的这个程序有的功能实现的还是比较粗糙和简单的,相信大家只要在这个程序 的基础上 举一反三,一定可以学习到很多很多的知识。同志们,努力吧!
|