浪曦-ASP.NET-简易留言板------------------------3(结局篇)

本篇为留言板最后总结,也是其精华所在。

1、DataList控件的使用方法;

添加DataList控件,右键编辑模板加入图片和文字

然后在其源中写入绑定字符如:

 <img src="image/<%# DataBinder.Eval(Container.DataItem,"imageName") %>" />

名字:<%# DataBinder.Eval(Container.DataItem,"name","{0}") %>&nbsp; &nbsp;&nbsp;

QQ:<%# DataBinder.Eval(Container.DataItem,"qq","{0}") %>

 主页:<%# DataBinder.Eval(Container.DataItem,"mainpage","{0}") %>

 

<%# DataBinder.Eval(Container.DataItem,"imageName") %>"这是绑定字符,它会自动读取绑定此控件绑定数据集中的imageName字段内容,其余几项也是如此,不过多了个"{0}",这是表示格式的。{/d}是时间设置。

下面来讲述如何绑定数据:

首先将数据从表中取出存入数据集中,上一次笔记已经说的很明白,代码如下:

        SqlConnection con = new SqlConnection();
        con = db.CreateSql();
        con.Open();
        SqlDataAdapter adt = new SqlDataAdapter();
        adt.SelectCommand = new SqlCommand("select * from guest order by indate DESC", con);
        DataSet ds =new DataSet();
        adt.Fill(ds, "guest");

这次由于是绑定到控件里,所以涉及到分页显示的问题,这里引入一个类PagedDataSource

        PagedDataSource pds = new PagedDataSource();       //引入类
        pds.DataSource = ds.Tables[0].DefaultView;                   //将数据集中数据赋予pds
        pds.AllowPaging = true;                                                        //容许分页为true
        pds.PageSize = 5;                                                                 //每页显示数为5行
        pds.CurrentPageIndex = pagenum - 1;                            //获取当前页,因为其内部页码从0开始,所以要-1
 

最后绑定数据:

        this.DataList1.DataSource = pds;
        this.DataList1.DataBind();

这样就可以展示留言了。

这里还有控制留言展示的一个小技巧,是通过页面几个控件做的,

pageNum存储当前页,另外两个按钮控制翻页,控制他们的代码如下

        this.pageOn.Enabled = true;
        this.pageDown.Enabled = true;
        db.pageCount = pds.PageCount;
        if (pagenum == 1)
        {
            this.pageOn.Enabled = false;
        }
        else if (pagenum == pds.PageCount)
        {
            this.pageDown.Enabled = false;
        }

这段代码的用意是使流言翻到头后不至于空翻,到头翻页按钮就失去作用。

还有一个是记录留言条数的语句,只是SQL语句罢了。

        SqlCommand scd = new SqlCommand("select count(*) from guest",con);
        this.num.Text = "总留言条数:"+Convert.ToString(scd.ExecuteScalar());

其中ExecuteScalar()为返回数据的第一个行,第一个字段,也就是SQL所取的留言条数select count(*) from guest"

2、静态变量在本例中的应用;

在db类中写入

              public static int pageCount;

用于存储页的数量,只要能读取总数量一回,在绑定数据的同时将其存入此静态变量。

此外,数据连接字符串也如此写在该类,为静态方法,方便调用(不知道不写成静态如何)

3、Session的应用;

在后台管理页,登陆管理员,输入名字密码后点击事件中做如下操作:

SqlCommand cmd = new SqlCommand("select count(*) from admins where    userName='"+this.Name.Text.Trim()+"' and userPwd='"+this.pwd.Text.Trim()+"'",con);
            int count =Convert.ToInt32(cmd.ExecuteScalar());

通过此操作,如果名字密码都对,那么返回数量为1,这里只要数量不为0就做如下操作,

            if (count > 0)
            {
                Session["admins"] = "wlc";
                Response.Redirect("showmes.aspx?message=登陆成功");
            }
            else
            {
                Response.Redirect("showmes.aspx?message=对不起,用户名密码错误,请重新登陆!");
            }

Session["admins"] = "wlc";定义一个名字为admins的Session并赋值wlc。

session可以理解为一个数组。每个登陆网站的用户都创建一个这样的数组,只是它的索引不是数字,而是自己定义的名字。

此处Session["admins"] 已不为空,在前台页面点击删除留言按钮的时候先判断此变量是否为空,为空则不能删除。

4、页面传值;

要对DataList绑定的数据做修改或删除,首先要知道要修改的数据是哪一行,这里id代表了行,

这里与数据同时绑定的还有两个控件,都是LinkButton。我们利用它的一个属性来存储行的id,页面代码如:

CommandArgument=<%# DataBinder.Eval(Container.DataItem,"id","{0}") %>这样就绑定了id。

再用Command事件传入此值

protected void returnword_Command(object sender, CommandEventArgs e)
    {
        if (Session["admins"] != null)
        {
            Response.Redirect("replay.aspx?guestid=" + e.CommandArgument);
        }
        else
        {
            Response.Redirect("showmes.aspx?message=请先登陆管理员帐户");
        }
    }

e.CommandArgument就是id,此处如果判断是管理员则将id以名为guestid的变量传出,页面跳转为replay.aspx

在replay.aspx页面内以

int id = Convert.ToInt32(Request.QueryString["guestid"]);

接住这个传来的变量值,去对数据做修改和删除。

        SqlConnection con = db.CreateSql();
        con.Open();

        SqlCommand cmd = new SqlCommand("update guest set reword='"+this.reword.Text.Trim()+"' where id="+id,con);
这里回复有判断是否成功的操作,同样用到了页面传值:
	if (Convert.ToInt32(cmd.ExecuteNonQuery()) > 0)
        {
            Response.Redirect("showmes.aspx?message=回复成功");
        }
        else
        {
            Response.Redirect("showmes.aspx?message=回复失败");
        }
cmd.ExecuteNonQuery()为受影响的行数。
删除操作的语句为: 
 SqlCommand cmd = new SqlCommand("delete from guest where id=" + e.CommandArgument, con);
这里有个小技巧,是给此按钮添加属性,代码如下:
    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        LinkButton lb = (LinkButton)(e.Item.FindControl("delword"));
        if (lb != null)
        {
            lb.Attributes.Add("onclick","return confirm('是否要删除留言?');");
        }
    }
利用DataList的ItemDataBound事件,先找到删除按钮e.Item.FindControl("delword"),此处它是OBJECT形式
将其转化为(LinkButton)形式后添加onclick属性lb.Attributes.Add("onclick","return confirm('是否要删除留言?');");
捎带说下数据插入语句:
 string sqlinto = "insert into guest(name,sex,qq,imagename,con,mainpage) values('" + this.usernametxt.Text.Trim() + "','" + sex + "','" + this.qqtxt.Text.Trim() + "','" + image + "','" + comment.Text.Trim() + "','" + this.mainpagetxt.Text.Trim() + "')";
好了,这个留言版重点的技术就都在这里了。虽然简单,但也包涵了最典型的数据增删改操作,以及页面传值,session等技术。
源码已经上传到CSDN网站,下载地址:http://download.csdn.net/source/464347
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值