博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2012-04-27 16:52  JmrBrvae  阅读(668)  评论(0编辑  收藏  举报

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

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

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

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

可是到了显示对应回复的时候,我傻眼了,不过想到了嵌套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();

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

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

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

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

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

<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>");
                }
            }

这样就可以了!

主要是想自己记录下,以便以后使用的时候可以更快的找到思路,传上来或许也可以帮到跟我一样的菜鸟!