.net把详细页及列表生成为静态页2
2010-01-27 18:02
/// <summary>
/// //生成列表页面 /// </summary> /// <param name="strMFile">新闻列表模板文件</param> /// <param name="pageSize">页面大小,即一页显示多少条新闻</param> /// <returns></returns> public void MakeHtmlListFile(string strMFile,int pageSize) { try { //创建HTML的编码 Encoding ed = Encoding.GetEncoding("gb2312"); //获取存放模板的地址--相对路径 string strPath = System.Web.HttpContext.Current.Server.MapPath("../htmllist/"); //删除新闻列表根目录下的所有文件 DirectoryInfo di = new DirectoryInfo(strPath); //获得文件 FileInfo[] fi = di.GetFiles(); //删除 foreach (FileInfo fiTemp in fi) { fiTemp.Delete(); } //读取模板文件 string strTemp = System.Web.HttpContext.Current.Server.MapPath("../Module/" + strMFile); //读取对象 StreamReader sr = null; //写入对象 StreamWriter sw = null; string str = ""; //读取模板文件 sr = new StreamReader(strTemp, ed); //读到最后一行,赋值给STR str = sr.ReadToEnd(); //此类来自隐藏了的项目空间 TB_logic tb_logic = new TB_logic(); //DataSet ds = tb_logic.FindMessage(); //获取新闻列表条数,只不过是执行一个存储过程罢了,本人团队用存储过程习惯了,呵呵 int nCount = tb_logic.FindMessage("dt_GetNewsList").Tables[0].Rows.Count; //int nPage = nCount > pageSize ? nCount / pageSize : 1; //获取新闻列表页数,三元表达式的嵌套,应该有更好的写法,经过了基本的测试,从逻辑上来说应该是Ok的 int nPage = nCount > pageSize ? (nCount % pageSize == 0 ? nCount / pageSize : nCount / pageSize + 1) : 1; //生成新闻列表页面 string sql = "select NEW_ID,NEW_TITLE,convert(nvarchar(10),NEW_RELEASE,121) SNEW_RELEASE from dbo.NEWS_MEDIUM order by NEW_ID desc"; //string strList = string.Empty; StringBuilder sbList = new StringBuilder(); DataSet ds = new DataSet();//分页显示新闻列表 for (int nI = 1; nI <= nPage; nI++) { //执行分页的存储过程,具体存储过程在另外一篇随笔中,执行存储过程代码不再详述 ds = tb_logic.DivPageNewsList(sql, pageSize, nI); //int nL = ds.Tables[1].Rows.Count; //显示新闻标题,并加入相应链接 sbList.Append("<ul>"); for (int nL = 0; nL < ds.Tables[1].Rows.Count; nL++) { //strList = strList sbList.Append("<li><SPAN>" + ds.Tables[1].Rows[nL]["SNEW_RELEASE"].ToString() + "</SPAN> <A href=../html/" + ds.Tables[1].Rows[nL]["NEW_ID"].ToString() + ".html>" + ds.Tables[1].Rows[nL]["NEW_TITLE"].ToString() + "</A></li>"); } sbList.Append( "</ul><br>");//显示分页导航 for (int nP = 1; nP <= nPage; nP++) { if(nP == nI)//本页面不加导航链接 { sbList.Append(nP.ToString() + " "); } else { //string strL = "<a href=newsList_" + nP.ToString() + ".html>" + nP.ToString() + "</a> "; sbList.Append("<a href=newsList_" + nP.ToString() + ".html>" + nP.ToString() + "</a> "); } } //自动生成HTML文件名 string htmlfilename = strPath + "newsList_" + nI.ToString() + ".html"; //从文本框里得到的值替换模板里的值 string strAll = str.Replace("NewsList", sbList.ToString()); //清空新闻列表内容 sbList.Length = 0; //开始写入创建的HTML文件 sw = new StreamWriter(htmlfilename, false, ed); sw.Write(strAll); sw.Flush(); sw.Close(); } } catch { throw; } //return true; } } } |