您的位置:首页 > 编程语言 > ASP

关于asp.net中dataList控件的使用学习记录

2012-04-27 16:52 661 查看
一直在做winfrom开发,把以前接触过的BS知识都忘记了。某朋友想让我帮他弄个留言板。。仔细想了想,伸手就开始写代码。目标很明确,用Datalist读取就是了。。

建立了两张表,一个是留言表,一个是回复表,他们是一对多的关系... 我开始想的很简单,先读取留言表,直接绑定到datalist上就OK了!

/// <summary>
/// 获取所有的留言
/// </summary>
private void GetAllMessage() {
string sql = "select * from Message";//Messgae为留言表
DataList1.DataSource = DBHelper.GetTable(sql,      CommandType.Text);
DataList1.DataBind();
}


结果显示的正常...我添加的留言都能显示出来 如图:



可是到了显示对应回复的时候,我傻眼了,不过想到了嵌套datalist 不过对于怎么查对应的数据是一点思路没有!而且嵌套的datalist是在编辑器中直接找不到的..

然后百度,http://blog.csdn.net/qinyun118/article/details/4981879 找了这篇帖子。。有思路了。。原来是可以在datalist中加DataKeyField的,一般就是该表中的主键,如代码所示:

<asp:DataList ID="DataList1" runat="server"
onitemdatabound="DataList1_ItemDataBound"  DataKeyField="Id" onitemcommand="DataList1_ItemCommand">


加上这了 剩下的就好说了 思路就是在datalist的ItemDataBound事件去绑定他的子datalist。

DataList dlDir2 = (DataList)e.Item.FindControl("DataList2");


上面那句代码可以找到你的子datalist 然后可以通过之前设置的datakey来找到对应的唯一标识:

string typeId = DataList1.DataKeys[e.Item.ItemIndex].ToString().Trim();


然后就可以进行你想做的操作了 绑定数据之类的!!

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataList dlDir2 = (DataList)e.Item.FindControl("DataList2");
string typeId = DataList1.DataKeys[e.Item.ItemIndex].ToString().Trim();
string sql = "select * from Rmessage where MessageId='" + typeId + "'";
dlDir2.DataSource = DBHelper.GetTable(sql, CommandType.Text);
dlDir2.DataBind();
}
}


就是这样,,然后在看下读取数据的效果:



没做什么美化 只是想实现功能。。对应的回复数据也读出来了!

至于回复,先说按钮,按钮有一个

<asp:Button ID="replay" runat="server" Text="回复" CommandArgument="Add" />


设置完CommandArgument后 在后台代码通过ItemCommand事件来处理代码

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandArgument == "Add") {
TextBox txtContent = (TextBox)e.Item.FindControl("txtReCon");
string sql = "insert into Rmessage values('"+DataList1.DataKeys[e.Item.ItemIndex]+"','sulei','"+txtContent.Text.Trim()+"','"+DateTime.Now.ToString("yyyy-MM-dd hh:mm")+"')";
int count = 0;
try
{
count = DBHelper.GetCount(sql, CommandType.Text);
}
catch (Exception ex)
{
Response.Write("<script>alert('"+ex.Message+"')</script>");
}
if (count != 0) {
Response.Write("<script>alert('回复成功')</script>");
}
}


这样就可以了!

主要是想自己记录下,以便以后使用的时候可以更快的找到思路,传上来或许也可以帮到跟我一样的菜鸟!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: