基兰皮肤价格表:BBS 浏览帖页面--DataList

来源:百度文库 编辑:偶看新闻 时间:2024/10/05 13:48:22

浏览帖子页面的实现过程

浏览帖子页面(CardInfo.aspx)实现了显示指定帖子及其回复信息的功能,该页面的运行结果如图23.10所示。

 (点击查看大图)图23.10  浏览帖子页面

浏览帖子页面实现的完整步骤如下:

(1)将一个表格(Table)控件置于CardInfo.aspx页中,为整个页面进行布局。

(2)CardInfo.aspx页面中常用的控件的属性设置及用途如表23.6所示。

表23.6  CardInfo.aspx页面中常用的控件的属性设置及用途

主要属性设置

   

标准/Label控件

Label4

Text属性设置为空

显示帖子名称

Label1

Text属性设置为空

显示帖子发表时间

Label2

Text属性设置为空

显示发帖人姓名

Label8

Text属性设置为空

显示帖子内容

labPage

Text属性设置为“1”

显示当前页码

labBackPage

Text属性设置为空

显示总页码

标准/LinkButton控件

LinkButton1

Font-Underline

属性设置为False

定向到回复信息页面

lnkbtnOne

Font-Underline

属性设置为False

第一页

lnkbtnUp

Font-Underline

属性设置为False

上一页

lnkbtnNext

Font-Underline

属性设置为False

下一页

lnkbtnBack

Font-Underline

属性设置为False

最后一页


续表

主要属性设置

   

标准/Image控件

Image2

属性值全部默认

显示发帖人头像

数据/DataList控件

dlInfo

属性设置见下面

“步骤(3)”中的代码

显示回帖信息

(3)进入CardInfo.aspx页面的HTML源码中,为DataList控件中的相应控件及超链接进行数据绑定,代码如下:

  1. ="White" BorderColor="#999999" 
  2.  BorderStyle="None" BorderWidth="0px" CellPadding=
    "3" GridLines="Vertical" Width="751px" OnDeleteCommand=
    "dlInfo_DeleteCommand"> ForeColor="Black" /> 
  3. "True" ForeColor="White" /> 
  4.   ="0" cellspacing="0" class="TableCss"> 
  5.      
  6.      center">回帖人信息 
  7.      left;"> 回帖主题:"server"><%# DataBinder.Eval(Container.DataItem,"回
    帖编号") %>--server"><%# DataBinder.Eval(Container.DataItem,
    "回帖主题") %> 
  8.      回帖时间:
    <%# DataBinder.E
    val(Container.DataItem,"回帖时间") %> 
  9.      57px;"> CommandName="Delete" ForeColor="Black">删除 
  10.      
  11.      
  12.      width: 165px"> 
  13.        Height="44px" Width="44px" ImageUrl='<%# getPhoto
    (Convert.ToString(DataBinder.Eval(Container.
    DataItem,"回帖编号"))) %>'/> 
  14.        <%# 
    DataBinder.Eval(Container.DataItem,"回帖人") %> 
  15.      text-align:left;">   <%# DataBinder.
    Eval(Container.DataItem,"回帖内容") %> 
  16.      
  17.     
  18.     
  19.     
  20.     
  21.     
  22.   

主要功能设计(2)

为DataList控件设置项模板的方法为:单击DataList控件右上角的 按钮,在弹出的快捷菜单(如图23.11所示)中选择"编辑模板"命令,或者右击DataList控件,选择弹出的快捷菜单中的"编辑模板"/"项模板(ItemTemplate)"命令,即可在DataList控件的项模板(ItemTemplate)中进行编辑。该页面中DataList项模板布局如图23.12所示。

 图23.11  "DataList任务"快捷菜单 (点击查看大图)图23.12  DataList项模板布局(4)返回设计页面,进入该页的代码编辑页面(CardInfo.aspx.cs),声明功能模块类的对象,以便在程序中调用它们的方法,代码如下:

  1. CardManage cardmanage = new CardManage();  
  2. RevertManage revertmanage = new RevertManage();  
  3. UserManage usermanage = new UserManage();  
  4. HostManage hostmanage = new HostManage(); 

(5)为了实现显示帖子及回复信息的功能,本实例自定义以下几种方法,分别为:dlBind、cardBind、dataBind、pageCount和getPhoto方法。下面分别对这几种方法进行介绍。

dlBind方法用于控制DataList控件的分页,代码如下:

  1. public void dlBind(string str)  
  2. {  
  3.     int curpage = Convert.ToInt32(labPage.Text);  
  4.     PagedDataSource ps = new PagedDataSource();  
  5.     revertmanage.CardID = str;  
  6.     ps.DataSource = revertmanage.FindRevertByCID
    (revertmanage, "tb_Revert").Tables[0].DefaultView;  
  7.     ps.AllowPaging = true; //是否可以分页  
  8.     ps.PageSize = 3; //显示的数量  
  9.     ps.CurrentPageIndex = curpage - 1; //取得当前页的页码  
  10.     lnkbtnUp.Enabled = true;  
  11.     lnkbtnNext.Enabled = true;  
  12.     lnkbtnBack.Enabled = true;  
  13.     lnkbtnOne.Enabled = true;  
  14.     if (curpage == 1)  
  15.     {  
  16.         lnkbtnOne.Enabled = false;//不显示"第一页"按钮  
  17.         lnkbtnUp.Enabled = false;//不显示"上一页"按钮  
  18.     }  
  19.     if (curpage == ps.PageCount)  
  20.     {  
  21.         lnkbtnNext.Enabled = false;//不显示"下一页"按钮  
  22.         lnkbtnBack.Enabled = false;//不显示"最后一页"按钮  
  23.     }  
  24.     this.labBackPage.Text = Convert.ToString(ps.PageCount);  
  25.     dlInfo.DataSource = ps;  
  26.     dlInfo.DataKeyField = "回帖编号";  
  27.     dlInfo.DataBind();  

cardBind方法用于显示帖子信息,并根据发帖人姓名显示其头像,代码如下:

  1. public void cardBind(string str)  
  2.     {  
  3.         try  
  4.         {  
  5.             cardmanage.CardID = str;  
  6.             Label1.Text = Convert.ToDateTime
    (cardmanage.FindCardByID(cardmanage, "tb_Card").
    Tables[0].Rows[0][4].ToString()).ToLongDateString();  
  7.             Label2.Text = cardmanage.FindCardByID
    (cardmanage, "tb_Card").Tables[0].Rows[0][5].ToString();  
  8.             Label4.Text = cardmanage.FindCardByID
    (cardmanage, "tb_Card").Tables[0].Rows[0][1].ToString();  
  9.             Label8.Text = cardmanage.FindCardByID
    (cardmanage, "tb_Card").Tables[0].Rows[0][3].ToString();  
  10.             string strPop = cardmanage.FindCardByID
    (cardmanage, "tb_Card").Tables[0].Rows[0][6].ToString().Trim();  
  11.             string strPhoto = "";  
  12.             if (strPop == "游客")  
  13.             {  
  14.                 strPhoto = "../Images/Visiter.jpg";  
  15.             }  
  16.             if (strPop == "用户")  
  17.             {  
  18.                 usermanage.UserName = cardmanage.
    FindCardByID(cardmanage, "tb_Card").Tables[0].Rows[0][5].ToString();  
  19.                 strPhoto = usermanage.FindUserByName
    (usermanage, "tb_User").Tables[0].Rows[0][8].ToString();  
  20.             }  
  21.             if (strPop == "版主")  
  22.             {  
  23.                 hostmanage.HostName = cardmanage.
    FindCardByID(cardmanage, "tb_Card").Tables[0].Rows[0][5].ToString();  
  24.                 strPhoto = hostmanage.FindHostByName
    (hostmanage, "tb_Host").Tables[0].Rows[0][8].ToString();  
  25.             }  
  26.             if (strPop == "管理员")  
  27.             {  
  28.                 strPhoto = "../Images/Admin.jpg";  
  29.             }  
  30.             Image2.ImageUrl = strPhoto;  
  31.         }  
  32.         catch { }  
  33.     } 

主要功能设计(3)

dataBind方法用于在Web页面中显示帖子及回复信息,代码如下:

  1. public void dataBind()  
  2.     {  
  3.         if (Page.Request.QueryString["CardID"] != null)  
  4.         {  
  5.             cardBind(Page.Request.QueryString["CardID"].ToString());  
  6.             dlBind(Page.Request.QueryString["CardID"].ToString());  
  7.             return;  
  8.         }  
  9.         if (Session["CardID"] != null)  
  10.         {  
  11.             cardBind(Session["CardID"].ToString());  
  12.             dlBind(Session["CardID"].ToString());  
  13.             return;  
  14.         }  
  15.     }  
  16.  
  17.     pageCount方法用于获得回帖显示的总页码数,代码如下:  
  18.  
  19.     public void pageCount()  
  20.     {  
  21.         if (Page.Request.QueryString["CardID"] != null)  
  22.         {  
  23.             dlBind(Page.Request.QueryString["CardID"].ToString());  
  24.             return;  
  25.         }  
  26.         if (Session["CardID"] != null)  
  27.         {  
  28.             dlBind(Session["CardID"].ToString());  
  29.             return;  
  30.         }  
  31.     } 

getPhoto方法用于根据回帖编号获得回帖人的头像信息,代码如下:

  1. public string getPhoto(string str)  
  2. {  
  3.     revertmanage.RevertID = str;  
  4.     string strPop = revertmanage.FindRevertByID
    (revertmanage, "tb_Revert").Tables[0].Rows[0][6].ToString().Trim();  
  5.     string strPhoto = "";  
  6.     if (strPop == "用户")  
  7.     {  
  8.         usermanage.UserName = revertmanage.
    FindRevertByID(revertmanage, "tb_Revert").
    Tables[0].Rows[0][5].ToString();  
  9.         strPhoto = usermanage.FindUserByName
    (usermanage, "tb_User").Tables[0].Rows[0][8].ToString();  
  10.     }  
  11.     if (strPop == "版主")  
  12.     {  
  13.         hostmanage.HostName = revertmanage.
    FindRevertByID(revertmanage, "tb_Revert").
    Tables[0].Rows[0][5].ToString();  
  14.         strPhoto = hostmanage.FindHostByName
    (hostmanage, "tb_Host").Tables[0].Rows[0][8].ToString();  
  15.     }  
  16.     if (strPop == "管理员")  
  17.     {  
  18.         strPhoto = "../Images/Admin.jpg";  
  19.     }  
  20.     return strPhoto;  

(6)在Page_Load事件中编写如下代码,用于当页面进行初始化时,显示帖子及其回复信息,代码如下:

  1. protected void Page_Load(object sender, EventArgs e)  
  2.     {  
  3.         try  
  4.         {  
  5.             dataBind();  
  6.         }  
  7.         catch { }  
  8.     } 

(7)双击LinkButton控件以便触发其Click事件,在该事件中实现控制DataList控件分页的功能,代码如下:

  1. protected void lnkbtnOne_Click(object sender, EventArgs e)  
  2.  {  
  3.      labPage.Text = "1";  
  4.      pageCount();  
  5.  }  
  6.  protected void lnkbtnUp_Click(object sender, EventArgs e)  
  7.  {  
  8.      labPage.Text = Convert.ToString(Convert.ToInt32(labPage.Text) - 1);  
  9.      pageCount();  
  10.  }  
  11.  protected void lnkbtnNext_Click(object sender, EventArgs e)  
  12.  {  
  13.      labPage.Text = Convert.ToString(Convert.ToInt32(labPage.Text) + 1);  
  14.      pageCount();  
  15.  }  
  16.  protected void lnkbtnBack_Click(object sender, EventArgs e)  
  17.  {  
  18.      labPage.Text = labBackPage.Text;  
  19.      pageCount();  
  20.  } 

(8)触发DataList控件的DeleteCommand事件,在该事件中判断登录者的权限,如果是"管理员"或"版主",则有权删除相应的回复信息,代码如下:

  1. protected void dlInfo_DeleteCommand(object source, 
    DataListCommandEventArgs e)  
  2.    {  
  3.        if (Session["Pop"] == "管理员" || Session["Pop"] == "版主")  
  4.        {  
  5.            string revertid = dlInfo.DataKeys[e.
    Item.ItemIndex].ToString(); //获取当前DataList控件列  
  6.            revertmanage.RevertID = revertid;  
  7.            revertmanage.DeleteRevert(revertmanage);  
  8.            Response.Write("");  
  9.            dataBind();  
  10.        }  
  11.        else  
  12.            Response.Redirect("../Common/LimitPop.aspx");  
  13.    }