读书人

关于Repeater 的三层嵌套有关问题 感兴

发布时间: 2012-04-13 13:50:24 作者: rapoo

关于Repeater 的三层嵌套问题 感兴趣的哥哥姐姐请看看!!
///第一层
<asp:Repeater ID="RpData" runat="server" OnItemDataBound="RpData_ItemDataBound">
<ItemTemplate>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="20px">
<div style="height: 10px;">
</div>
<div>
<span style="word-wrap: break-word; word-break: nomal; font-size: 13px; font-weight: bold;">
<%# Eval("Name")%></span></div>
<asp:HiddenField ID="PowerID" Value='<%# Eval("ID") %>' runat="server" />
</td>
<td>
<div style="width: 800px; float: left; margin-left: -10px;">
///第二层
<asp:Repeater ID="RpUpid" OnItemDataBound="RpUpid_ItemDataBound" runat="server">
<ItemTemplate>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="20px">
<div style="height: 10px;">
</div>
<div>
<span style="word-wrap: break-word; word-break: nomal; font-size: 13px; font-weight: bold;">
<%# Eval("Name")%></span></div>
<asp:HiddenField ID="upid" Value='<%# Eval("ID") %>' runat="server" />
</td>
<td>
///////第三层
<asp:Repeater ID="RpUser" OnItemDataBound="RpUser_ItemDataBound" runat="server">
<ItemTemplate>
<div style="text-align: center; margin-left: 10px; margin-top: 10px; float: left;
background-color: #e5eaf0; height: 55px; width: 100px; border: #666666 1px solid;">
<div style="text-align: center; margin-top: 0px; vertical-align: middle; height: 30px;
margin-top: 5px; font-size: 13px;">
<b>
<asp:HyperLink ID="hpUser" NavigateUrl='<%# "InOtherBoxList.aspx?UserID=" + Eval("UserID") %>'
runat="server"><%# Eval("Name") %></asp:HyperLink>
</b>


</div>
<div style="height: 15px; font-size: 13px; margin-top: 0px; text-align: center;">
<div style="float: left; width: 100px; color: #cd021a;">
<b>
<asp:HyperLink ID="hpNumber" style="color: #cd021a;" NavigateUrl='<%# "InOtherBoxList.aspx?UserID=" + Eval("UserID") %>'
runat="server"><%# Eval("Number") %></asp:HyperLink>
</b>
</div>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
</td></tr></table>
</ItemTemplate>
</asp:Repeater>
</div>
</td>
</table>
</ItemTemplate>
</asp:Repeater>


第一层主要读出父类标题
第二层包括子类标题+第三层Repeater(需要判断 无子类标题的 第三层Repeater 直接按照父类ID读数据 这是最蛋疼的)
第三层 根据子类ID 读数据 子类ID>1个
表中有标识 upid 父类=0 子类=父类ID 这样

cs代码
public new void DataBind()
{
DataSet ds = new DataSet();
ds = objPr.GetList(" upid = 0 Order by Sort");
RpData.DataSource = ds.Tables[0];
RpData.DataBind();
}

protected void RpData_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
HiddenField PowerID = (HiddenField)e.Item.FindControl("PowerID");
DataSet ds = null;
if (PowerID.Value == "4")
{
ds = objPr.GetList("upid<>0 order by sort");
Repeater RpUpid = (Repeater)e.Item.FindControl("RpUpid");
RpUpid.DataSource = ds.Tables[0];
RpUpid.DataBind();
}
//else
//{
// ds = objPr.GetList("upid = 0 order by sort");
//}

}
}


protected void RpUpid_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataSet ds = null;
HiddenField PowerID = (HiddenField)e.Item.FindControl("upid");
//if (pid != 4)
//{
// ds = objUser.GetJoinList(0, "a.PowerID = " + pid, "");
//}
//else
//{
ds = objUser.GetJoinList(0, "a.PowerID = " + PowerID.Value, "");


//}
DataTable newdtb = new DataTable();
newdtb.Columns.Add("ID", typeof(int));
newdtb.Columns.Add("Name", typeof(string));
newdtb.Columns.Add("Number", typeof(int));
newdtb.Columns.Add("UserID", typeof(int));
newdtb.Columns["ID"].AutoIncrement = true;

if (ds.Tables[0].Rows.Count > 0)
{
foreach (DataRow Dr in ds.Tables[0].Rows)
{
DataRow newRow = newdtb.NewRow();
newRow["Name"] = Dr["Name"];
newRow["UserID"] = Dr["ID"];
int Number = objM.GetNotReadCount(Convert.ToInt32(Dr["ID"]));
newRow["Number"] = Number;
newdtb.Rows.Add(newRow);
}
}
Repeater RpUser = (Repeater)e.Item.FindControl("RpUser");
RpUser.DataSource = newdtb;
RpUser.DataBind();
pid = 0;
}
}

不知道怎么去判断 在第一层的类里如何绑定第三层 在第二层如何获取第一层的隐藏域值


[解决办法]
+qq一起讨论

读书人网 >asp.net

热点推荐