2013-04-24 85 views
0

我有一個服務頁面,顯示服務的詳細信息,並有一個子部分,如服務功能和收費。我創建了兩個用於功能和收費的中繼器。請參考下面的SQL表圖像的詳細資料:如何綁定嵌套中繼器?

enter image description here

但我不知道如何該層級數據綁定到嵌套的中繼器。這裏是我的代碼:

<!--Nested Repeater Section--> 
    <asp:Repeater ID="ServiceDetailsRepeater" runat="server" 
     onitemdatabound="ServiceDetailsRepeater_ItemDataBound"> 
    <ItemTemplate> 
     <asp:HiddenField ID="service_id" runat="server" Value='<%#Eval("Id")%>'/> 
    <h3><a name='<%#Eval("Id")%>'></a><%#Eval("Service_name")%></h3> 
    <img src='<%# "images/"+ Eval("ImageName")%>' alt="picture" width="48" height="48" class="img" /> 
    <p><%#Eval("Service_desc")%></p> 
    <div id="Div1" class="clr" runat="server">&nbsp;</div> 
    <div id="Div2" class="box" runat="server"> 
     <div id="Div3" class="box_t" runat="server"> 
      <asp:Panel ID="Panel_ServiceFeature" runat="server" class="box_b"> 
     <h2>Features</h2> 
     <ul style="font-family:Arial, Helvetica, sans-serif;font-size:11px;color:#5f5f5f"> 
      <asp:Repeater ID="ServiceFeatureRepeater" runat="server"> 
      <ItemTemplate> 
      <li><%#Eval("Feature_Text")%></li> 
      </ItemTemplate> 
      </asp:Repeater> 
      </ul> 
      </asp:Panel> 
    </div> 
    </div> 
    <div id="Div5" class="clr" runat="server">&nbsp;</div> 
    <div id="Div6" class="box" runat="server"> 
     <div id="Div7" class="box_t" runat="server"> 
      <asp:Panel ID="Panel_ServiceCharge" runat="server" class="box_b"> 
     <h2>Charges</h2> 
     <table style="font-family:Arial, Helvetica, sans-serif;font-size:11px;color:#5f5f5f"> 
     <tr><td></td> 
     <td>Rs.</td><td>&nbsp;</td><td align="left">Months</td></tr> 
     <asp:Repeater ID="ServiceChargeRepeater" runat="server"> 
     <ItemTemplate> 
     <tr> 
     <td><img src="images/sub_nav.gif" width="18px" height="14px" alt=""/></td> 
     <td>Rs. <%#String.Format("{0:#,###}", Eval("Charges_Per_Month"))%></td> 
     <td>&nbsp;</td> 
     <td><%#Eval("No_Of_Month")%> Months</td> 
     </tr> 
      </ItemTemplate> 
      </asp:Repeater> 
     </table> 
      </asp:Panel> 
    </div> 
</div> 
<div id="Div9" class="clr" runat="server"></div> 
    </ItemTemplate> 
    </asp:Repeater> 
    <!--End Section--> 

最後,my web site page這是我生活的網站服務頁面視圖。此頁面是靜態的,但現在我想將此服務詳細信息與數據庫綁定。

回答

2

一種方式做到這一點是簡單地將內RepeaterDataSource屬性綁定到一個合適的收集。例如。是這樣的:

<asp:Repeater ID="ServiceDetailsRepeater" runat="server" 
     DataSourceID="SqlDataSource1"> 

    <asp:Repeater ID="ServiceFeatureRepeater" runat="server" 
     DataSource="<%# DatabaseHelper.GetFeatures(Eval("Id")) %>"> 
     ... 
    </asp:Repeater> 

    <asp:Repeater ID="ChargesRepeater" runat="server" 
     DataSource="<%# DatabaseHelper.GetCharges(Eval("Id")) %>"> 
     ... 
    </asp:Repeater> 

</asp:Repeater> 

我也檢查,如果沒有特色或收費被發現特定的服務的話,面板必須關閉。所以我直接從代碼中做背後

UPDATE

如果您更舒適的代碼隱藏,繼續這樣做,但你也可以做到這一點聲明通過數據綁定Repeater的Visible財產,例如:

... 
    <asp:Repeater ID="ServiceFeatureRepeater" runat="server" 
     DataSource="<%# DatabaseHelper.GetFeatures(Eval("Id")) %>" 
     Visible="<%# DatabaseHelper.HasFeatures(Eval("Id")) %>" 
     > 
     ... 
    </asp:Repeater> 
    .... 
+0

我也檢查是否沒有發現功能或收費特定的服務,然後面板不得不關閉。所以我直接從代碼後面做。 – 2013-06-05 11:56:59

1
if (!Page.IsPostBack) 
      { 
       ServiceListRepeater.DataSource = DatabaseHelper.GetSummaryOfActiveServices(); 
       ServiceListRepeater.DataBind(); 
       ServiceDetailsRepeater.DataSource = DatabaseHelper.GetSummaryOfActiveServices(); 
       ServiceDetailsRepeater.DataBind(); 
      } 

protected void ServiceDetailsRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     RepeaterItem item = e.Item; 
     if ((item.ItemType == ListItemType.Item) ||(item.ItemType == ListItemType.AlternatingItem)) 
     { 
      HiddenField service_id = (HiddenField)item.FindControl("service_id"); 
      Repeater service_features = (Repeater)item.FindControl("ServiceFeatureRepeater"); 
      service_features.DataSource = DatabaseHelper.GetFeatureSummary(int.Parse(service_id.Value.ToString())); 
      service_features.DataBind(); 
      if (service_features.Items.Count == 0) 
      { 
       Panel Panel_ServiceFeature = (Panel)item.FindControl("Panel_ServiceFeature"); 
       Panel_ServiceFeature.Visible = false; 
      } 
      Repeater service_charges =(Repeater)item.FindControl("ServiceChargeRepeater"); 
      service_charges.DataSource = DatabaseHelper.GetChargeSummary(int.Parse(service_id.Value.ToString())); 
      service_charges.DataBind(); 
      if (service_charges.Items.Count == 0) 
      { 
       Panel Panel_ServiceCharge = (Panel)item.FindControl("Panel_ServiceCharge"); 
       Panel_ServiceCharge.Visible = false; 
      } 
     } 
    }