之前在網上找Repeater嵌套,大多都是綁定的DATASET或者是datatable,很少有綁定List泛型對象。爲啦找到解決辦法,苦悶啦好一陣子。現在解決啦,和大家分享一下。
這是嵌套運行效果
這是前臺頁面
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<div class="main">
<div class="container">
<div class="containerheader">
<div class="headleft">
<p>
單頁/海報
</p>
</div>
<div class="headright">
</div>
</div>
<div class="sidebar">
<uc:Sidebar ID="Sidebar" runat="server" />
</div>
<div class="content">
<div class="contenttop">
<div id="Main">
<div class="contenttop">
<ul>
<li>
<%-- 成品尺寸等的repeater--%>
<asp:Repeater ID="reProductpartItemList" runat="server">
<ItemTemplate>
<p>
<a><span>
<%#((DscyModel.ProductPartParameter)Container.DataItem).ParameterName%></span></a>
<img src="../b_Images/help.png" alt="help" title="" rel="Tooltip" /></p>
</ItemTemplate>
</asp:Repeater>
<p>
<a><span>工藝類型</span></a><img src="../b_Images/help.png" alt="help" title="工藝類型" rel="Tooltip" />
</p>
</li>
</ul>
</div>
<div class="clear">
</div>
<div class="autodiv">
</div>
<div class="contentmain">
<%-- 通過repeater嵌套,顯示成品尺寸,p面下的具體大小等--%>
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound" OnItemCreated="Repeater1_ItemCreated">
<ItemTemplate>
<div class="attribute_list">
<asp:Repeater ID="Repeater2" runat="server">
<ItemTemplate>
<div class="attribute_list_option">
<a href="javascript:void(0)">
<%# DataBinder.Eval(Container.DataItem, "ItemName") %>
<%-- <%#((DscyModel.ProductPartParameter)Container.DataItem).ParameterName%>--%>
</a>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:Repeater>
<div class="attribute_list">
<%-- 顯示 工藝類型的具體內容--%>
<asp:Repeater ID="reProductpartprocess" runat="server">
<ItemTemplate>
<div class="attribute_list_option">
<a href="javascript:void(0)">
<%# DataBinder.Eval(Container.DataItem, "ProcessName")%></a>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
</div>
</div>
</div>
<div class="clear">
</div>
</div>
<div class="clear">
</div>
<div class="soliddiv">
</div>
</div>
</asp:Content>
這是後臺的代碼
int prodcutid = 0;//這個全局變量的id是定義好的。直接通過頁面傳值的
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
prodcutid = Convert.ToInt32(Request["ProId"]);
//部件參數(成品尺寸,P面)的repeater
gProductpartparamsList(prodcutid);
//部件子表(成品尺寸的高寬等)
gProductpartItemList(prodcutid);
//部件工藝類型
gProductpartprocessList(prodcutid);
GetPartProcessFromInfo(prodcutid);
}
}
/// <summary>
/// 查看主表信息的時候,部件表 工藝表對應的信息都需要顯示
/// </summary>
/// <param name="prodcutid"></param>
private void GetPartProcessFromInfo(int prodcutid)
{
List<ProductPartParameter> productpart = (new ProductInFoBLL()).GetProductPartParmList(prodcutid);
reProductpartItemList.DataSource = productpart;
reProductpartItemList.DataBind();
}
/// <summary>
/// 取對應產品部件的元素(部件參數,eg:成品尺寸,p/面)
/// </summary>
/// <param name="partItemId"></param>
/// <returns></returns>
public void gProductpartparamsList(int partItemId)
{
//通過調用GetProductPartParmList方法,deng
List<ProductPartParameter> productpart = (new ProductInFoBLL()).GetProductPartParmList(partItemId);
reProductpartItemList.DataSource = productpart;
reProductpartItemList.DataBind();
}
/// <summary>
/// 取對應產品部件的元素(部件參數,eg:成品尺寸的長寬高)
/// </summary>
/// <param name="partId"></param>
public void gProductpartItemList(int partId)
{
List<ProductPartParameter> productpart = (new ProductInFoBLL()).GetProductPartParmList(prodcutid);
Repeater1.DataSource = productpart;
Repeater1.DataBind();
}
/// <summary>
/// 這個事件是當repeater綁定一列後執行一次,綁定一列執行一次
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Repeater1_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("Repeater2") as Repeater;//找到裏層的repeater對象
ProductPartParameter Idparam = (ProductPartParameter)e.Item.DataItem;
int typeid = Convert.ToInt32(Idparam.ID_Parameter);
List<ProductPartParameterItem> productpartParaItem = (new ProductInFoBLL()).GetProductPartItemList01(prodcutid, typeid);
rep.DataSource = productpartParaItem;
rep.DataBind();
}
}
/// <summary>
/// 在r1的ItemCreated事件中註冊一下r2
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e)
{
Repeater rep = e.Item.FindControl("Repeater2") as Repeater;
}
//取對應部件工藝可選參數列表
public void gProductpartprocessList(int partId)
{
List<ProductPartProcess> productpartprocess = (new ProductInFoBLL()).GetProductPartItemProcessList(partId);
reProductpartprocess.DataSource = productpartprocess;
reProductpartprocess.DataBind();
}