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


    一直在做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>");
                    }
                }

    这样就可以了!

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

  • 相关阅读:
    IT认证一一看过来
    SQL Server连接中三个常见的错误分析
    解决SFTP时,NetBeans恼人的RSA提示
    Mixing Integrated Authentication and Anonymous Authentication with PreAuthenticated = true doesn’t work
    一段扫flash跨站的脚本
    图解用WAS对Web服务器进行压力测试
    Google TrustRank与Hilltop算法
    Stupid smart code
    Archlinux桌面配置指南
    TSVNCache占用CPU的解决办法
  • 原文地址:https://www.cnblogs.com/sulei4471/p/2473763.html
Copyright © 2020-2023  润新知