一直在做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>"); } }
这样就可以了!
主要是想自己记录下,以便以后使用的时候可以更快的找到思路,传上来或许也可以帮到跟我一样的菜鸟!