Repeater嵌套问题,,,真有点难啊?????? 本帖最后由 huangxiandong_dodo 于 2010-07-23 12:05:10 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Repeater Repeater2= (Repeater)e.Item.Parent;在Command里这么写,不难 protected void RpFirst_ItemDataBound(object sender, RepeaterItemEventArgs e) { //判断里层repeater处于外层repeater的哪个位置( AlternatingItemTemplate,FooterTemplate, //HeaderTemplate,,ItemTemplate,SeparatorTemplate) if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Repeater rep = e.Item.FindControl("RpSecondMenu") as Repeater;//找到里层的repeater对象 DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项 int fatherID = Convert.ToInt32(rowv["FatherID"]); //获取填充子类的id Maticsoft.BLL.YZ_MenuInfo bll = new Maticsoft.BLL.YZ_MenuInfo(); rep.DataSource = bll.getSecondMenuListByFatherID(fatherID); rep.DataBind(); } }把里面该改的改成你项目对应的就可以了 <asp:Label ID="Label1" runat="server" Text='<%#Eval("UserID")%>'></asp:Label> <br /> <asp:Repeater ID="Repeater2" runat="server" DataSource='<%# GetDetails(Convert.ToInt32(Eval("ID"))) %>'> 添加按钮protected void Button1_Click(object sender, EventArgs e) { RepeaterItem item =(RepeaterItem) ((Button)sender).Parent; Label l = (Label)item.FindControl("lbl"); Response.Write(l.Text); } 页面文件<%@ Import Namespace="System.Data" %><html><head runat="server"> <title>版块管理</title> <style type="text/css"> input { font-size:9pt; font-family:Verdana; } </style></head><body> <form id="form1" runat="server"> <div> <asp:Repeater ID="rpt_Class" runat="server" OnItemCommand="rpt_Class_ItemCommand"> <HeaderTemplate> <table cellpadding="3" cellspacing="1" style="font-size:9pt; font-family:Verdana;"> <tr> <td> 新建分类 <asp:TextBox ID="tb_NewClassName" runat="server"></asp:TextBox> <asp:Button ID="btn_AddBoard" runat="server" CommandName="AddClass" Text="○ 添加分类"/> </td> </tr> </HeaderTemplate> <ItemTemplate> <tr style="background-color:#f0f0f0"> <td> <asp:Button ID="btn_DelClass" runat="server" CommandArgument='<%# Eval("ClassID") %> ' CommandName="DelClass" Text="× 删除分类" OnClientClick="return confirm('确实删除分类吗?删除分类会清除分类下所有版块以及版块下的所有帖子!')"/> <asp:TextBox ID="tb_ClassName" runat="server" Text='<%# Eval("ClassName") %>' /> <asp:Button ID="btn_ModifyClass" runat="server" CommandArgument='<%# Eval("ClassID") %> ' CommandName="ModifyClass" Text="√ 修改分类"/> </td> </tr> <tr> <td> 在此分类下添加版块 <asp:TextBox ID="tb_NewBoardName" runat="server"></asp:TextBox> <asp:Button ID="btn_AddBoard" runat="server" CommandArgument='<%# Eval("ClassID") %> ' CommandName="AddBoard" Text="○ 添加版块"/> </td> </tr> <asp:Repeater ID="rpt_Board" runat="server" DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("RelationBetweenClassAndBoard") %>' OnItemCommand="rpt_Board_ItemCommand"> <ItemTemplate> <tr> <td> |-------- <asp:Button ID="btn_DelClass" runat="server" CommandArgument='<%# Eval("[\"BoardID\"]")%> ' CommandName="DelBoard" Text="× 删除版块" OnClientClick="return confirm('确实删除版块吗?删除版块会清除版块下的所有帖子!')"/> <asp:TextBox ID="tb_BoardName" runat="server" Text='<%# Eval("[\"BoardName\"]")%>'></asp:TextBox> <asp:Button ID="btn_ModifyBoard" runat="server" CommandArgument='<%# Eval("[\"BoardID\"]")%> ' CommandName="ModifyBoard" Text="√ 修改版块"/> </td> </tr> </ItemTemplate> </asp:Repeater> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> </div> </form></body></html>后台文件using System;using System.Data;using System.Data.SqlClient;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;public partial class Admin_ManageBoard : System.Web.UI.Page{ private string sConnectionString = ConfigurationManager.ConnectionStrings["ForumConnString"].ToString(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { SetBind(); } } private void SetBind() { DataSet ds = new DataSet(); using (SqlConnection conn = new SqlConnection(sConnectionString)) { SqlDataAdapter da = new SqlDataAdapter("select * from tbClass;select * from tbBoard", conn); da.Fill(ds); } ds.Relations.Add("RelationBetweenClassAndBoard", ds.Tables[0].Columns["ClassID"], ds.Tables[1].Columns["BoardClassID"]); rpt_Class.DataSource = ds; rpt_Class.DataBind(); } protected void rpt_Board_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandName == "DelBoard") { using (SqlConnection conn = new SqlConnection(sConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("delete tbTopic where TopicBoardID in (select BoardID from tbBoard where BoardClassID=@BoardID);delete tbBoard where BoardID=@BoardID", conn)) { cmd.Parameters.AddWithValue("@BoardID", e.CommandArgument); cmd.ExecuteNonQuery(); SetBind(); } } } if (e.CommandName == "ModifyBoard") { RepeaterItem ri = e.Item; TextBox tb = ri.FindControl("tb_BoardName") as TextBox; using (SqlConnection conn = new SqlConnection(sConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("update tbBoard set BoardName=@BoardName where BoardID=@BoardID", conn)) { cmd.Parameters.AddWithValue("@BoardName", tb.Text); cmd.Parameters.AddWithValue("@BoardID", e.CommandArgument); cmd.ExecuteNonQuery(); SetBind(); } } } } protected void rpt_Class_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandName == "AddClass") { RepeaterItem ri = e.Item; TextBox tb = ri.FindControl("tb_NewClassName") as TextBox; using (SqlConnection conn = new SqlConnection(sConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("insert into tbClass (ClassName) values (@ClassName)", conn)) { cmd.Parameters.AddWithValue("@ClassName", tb.Text); cmd.ExecuteNonQuery(); SetBind(); } } } if (e.CommandName == "AddBoard") { RepeaterItem ri = e.Item; TextBox tb = ri.FindControl("tb_NewBoardName") as TextBox; using (SqlConnection conn = new SqlConnection(sConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("insert into tbBoard (BoardName,BoardClassID) values (@BoardName,@BoardClassID)", conn)) { cmd.Parameters.AddWithValue("@BoardName", tb.Text); cmd.Parameters.AddWithValue("@BoardClassID", e.CommandArgument); cmd.ExecuteNonQuery(); SetBind(); } } } if (e.CommandName == "DelClass") { using (SqlConnection conn = new SqlConnection(sConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("delete tbTopic where TopicBoardID in (select BoardID from tbBoard where BoardClassID=@ClassID);delete tbBoard where BoardClassID=@ClassID;delete tbClass where ClassID=@ClassID", conn)) { cmd.Parameters.AddWithValue("@ClassID", e.CommandArgument); cmd.ExecuteNonQuery(); SetBind(); } } } if (e.CommandName == "ModifyClass") { RepeaterItem ri = e.Item; TextBox tb = ri.FindControl("tb_ClassName") as TextBox; using (SqlConnection conn = new SqlConnection(sConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("update tbClass set ClassName=@ClassName where ClassID=@ClassID", conn)) { cmd.Parameters.AddWithValue("@ClassName", tb.Text); cmd.Parameters.AddWithValue("@ClassID", e.CommandArgument); cmd.ExecuteNonQuery(); SetBind(); } } } }} 你怎么会在Repeater2的Item里面找Repeater2的呢?Repeater2不是在Repeater1的Item里面么?我看不懂了。这个代码。 谢谢 1 楼 chenghaoorange 的确是的 Parent 是找到父容器,也就是他自己了,,,只不过 wuyq11 和 zzxap 有点没有看明白,,,当然用处也很的的结贴吧! 有人用过ewebeditor吗? !!!!如何给外部邮箱发邮件 ASPxGridView中如何才能取到TextBox中的值?急!在线等,可以加分! 在用户本地机上创建文件? 简单的问题,前台JS生成SELECT ,后台怎么获取它的值? 当前脚本发生错误"字符集越界 " ?? 请教,各位大哥几个基本的问题,在此有礼了! 如何调用组件,help BoundColumn的问题 关于mvc框架下的一些传值问题,求大大帮忙下 table动态添加行列 string 有多长????
在Command里这么写,不难
protected void RpFirst_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//判断里层repeater处于外层repeater的哪个位置( AlternatingItemTemplate,FooterTemplate,
//HeaderTemplate,,ItemTemplate,SeparatorTemplate)
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rep = e.Item.FindControl("RpSecondMenu") as Repeater;//找到里层的repeater对象
DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项
int fatherID = Convert.ToInt32(rowv["FatherID"]); //获取填充子类的id
Maticsoft.BLL.YZ_MenuInfo bll = new Maticsoft.BLL.YZ_MenuInfo();
rep.DataSource = bll.getSecondMenuListByFatherID(fatherID);
rep.DataBind();
} }
把里面该改的改成你项目对应的就可以了
<asp:Repeater ID="Repeater2" runat="server" DataSource='<%# GetDetails(Convert.ToInt32(Eval("ID"))) %>'>
添加按钮
protected void Button1_Click(object sender, EventArgs e)
{
RepeaterItem item =(RepeaterItem) ((Button)sender).Parent;
Label l = (Label)item.FindControl("lbl");
Response.Write(l.Text);
}
<%@ Import Namespace="System.Data" %>
<html>
<head runat="server">
<title>版块管理</title>
<style type="text/css">
input
{
font-size:9pt;
font-family:Verdana;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="rpt_Class" runat="server" OnItemCommand="rpt_Class_ItemCommand">
<HeaderTemplate>
<table cellpadding="3" cellspacing="1" style="font-size:9pt; font-family:Verdana;">
<tr>
<td>
新建分类 <asp:TextBox ID="tb_NewClassName" runat="server"></asp:TextBox>
<asp:Button ID="btn_AddBoard" runat="server" CommandName="AddClass" Text="○ 添加分类"/>
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:#f0f0f0">
<td>
<asp:Button ID="btn_DelClass" runat="server" CommandArgument='<%# Eval("ClassID") %> ' CommandName="DelClass" Text="× 删除分类" OnClientClick="return confirm('确实删除分类吗?删除分类会清除分类下所有版块以及版块下的所有帖子!')"/>
<asp:TextBox ID="tb_ClassName" runat="server" Text='<%# Eval("ClassName") %>' />
<asp:Button ID="btn_ModifyClass" runat="server" CommandArgument='<%# Eval("ClassID") %> ' CommandName="ModifyClass" Text="√ 修改分类"/>
</td>
</tr>
<tr>
<td>
在此分类下添加版块 <asp:TextBox ID="tb_NewBoardName" runat="server"></asp:TextBox>
<asp:Button ID="btn_AddBoard" runat="server" CommandArgument='<%# Eval("ClassID") %> ' CommandName="AddBoard" Text="○ 添加版块"/>
</td>
</tr>
<asp:Repeater ID="rpt_Board" runat="server" DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("RelationBetweenClassAndBoard") %>' OnItemCommand="rpt_Board_ItemCommand">
<ItemTemplate>
<tr>
<td>
|--------
<asp:Button ID="btn_DelClass" runat="server" CommandArgument='<%# Eval("[\"BoardID\"]")%> ' CommandName="DelBoard" Text="× 删除版块" OnClientClick="return confirm('确实删除版块吗?删除版块会清除版块下的所有帖子!')"/>
<asp:TextBox ID="tb_BoardName" runat="server" Text='<%# Eval("[\"BoardName\"]")%>'></asp:TextBox>
<asp:Button ID="btn_ModifyBoard" runat="server" CommandArgument='<%# Eval("[\"BoardID\"]")%> ' CommandName="ModifyBoard" Text="√ 修改版块"/>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>后台文件
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class Admin_ManageBoard : System.Web.UI.Page
{
private string sConnectionString = ConfigurationManager.ConnectionStrings["ForumConnString"].ToString();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetBind();
}
} private void SetBind()
{
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
SqlDataAdapter da = new SqlDataAdapter("select * from tbClass;select * from tbBoard", conn);
da.Fill(ds);
}
ds.Relations.Add("RelationBetweenClassAndBoard", ds.Tables[0].Columns["ClassID"], ds.Tables[1].Columns["BoardClassID"]);
rpt_Class.DataSource = ds;
rpt_Class.DataBind();
}
protected void rpt_Board_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "DelBoard")
{
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("delete tbTopic where TopicBoardID in (select BoardID from tbBoard where BoardClassID=@BoardID);delete tbBoard where BoardID=@BoardID", conn))
{
cmd.Parameters.AddWithValue("@BoardID", e.CommandArgument);
cmd.ExecuteNonQuery();
SetBind();
}
}
}
if (e.CommandName == "ModifyBoard")
{
RepeaterItem ri = e.Item;
TextBox tb = ri.FindControl("tb_BoardName") as TextBox;
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("update tbBoard set BoardName=@BoardName where BoardID=@BoardID", conn))
{
cmd.Parameters.AddWithValue("@BoardName", tb.Text);
cmd.Parameters.AddWithValue("@BoardID", e.CommandArgument);
cmd.ExecuteNonQuery();
SetBind();
}
}
}
} protected void rpt_Class_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "AddClass")
{
RepeaterItem ri = e.Item;
TextBox tb = ri.FindControl("tb_NewClassName") as TextBox;
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("insert into tbClass (ClassName) values (@ClassName)", conn))
{
cmd.Parameters.AddWithValue("@ClassName", tb.Text);
cmd.ExecuteNonQuery();
SetBind();
}
}
}
if (e.CommandName == "AddBoard")
{
RepeaterItem ri = e.Item;
TextBox tb = ri.FindControl("tb_NewBoardName") as TextBox;
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("insert into tbBoard (BoardName,BoardClassID) values (@BoardName,@BoardClassID)", conn))
{
cmd.Parameters.AddWithValue("@BoardName", tb.Text);
cmd.Parameters.AddWithValue("@BoardClassID", e.CommandArgument);
cmd.ExecuteNonQuery();
SetBind();
}
}
}
if (e.CommandName == "DelClass")
{
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("delete tbTopic where TopicBoardID in (select BoardID from tbBoard where BoardClassID=@ClassID);delete tbBoard where BoardClassID=@ClassID;delete tbClass where ClassID=@ClassID", conn))
{
cmd.Parameters.AddWithValue("@ClassID", e.CommandArgument);
cmd.ExecuteNonQuery();
SetBind();
}
}
}
if (e.CommandName == "ModifyClass")
{
RepeaterItem ri = e.Item;
TextBox tb = ri.FindControl("tb_ClassName") as TextBox;
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("update tbClass set ClassName=@ClassName where ClassID=@ClassID", conn))
{
cmd.Parameters.AddWithValue("@ClassName", tb.Text);
cmd.Parameters.AddWithValue("@ClassID", e.CommandArgument);
cmd.ExecuteNonQuery();
SetBind();
}
}
}
}
}
Repeater2不是在Repeater1的Item里面么?
我看不懂了。这个代码。