本篇为留言板最后总结,也是其精华所在。
1、DataList控件的使用方法;
添加DataList控件,右键编辑模板加入图片和文字
然后在其源中写入绑定字符如:
<img src="image/<%# DataBinder.Eval(Container.DataItem,"imageName") %>" />
名字:<%# DataBinder.Eval(Container.DataItem,"name","{0}") %>
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