2010-07-28 96 views
8

我有一個顯示器需要比我用的更加動態,而且看起來無法完全找到我需要的答案。嵌套中繼器

     Customer a  Customer b  Customer c (and so on) 
    savings with product a 

    savings with product b 

    (and so on) 

我知道每個字段總會有一個最小值。有人說使用嵌入式中繼器或其他東西。我環顧四周,無法找到如何使用嵌套中繼器。我處於截止日期之前,不能真正玩弄東西,直到找到有效的東西。

應該用什麼asp控件來做到這一點?一個例子會很好,但我只需要幫助正確的方向。

我正在使用sql,但通過鏈接獲取數據。數據以列表形式結束。

謝謝你的幫助!

+0

Waht是你從數據庫中獲得的數據的形狀?你應該如何展示這些信息,從設計,使用div,表格的任何requiremnets? – 2010-07-28 18:44:50

回答

17

嵌套中繼器很容易。只要將一個在你的ItemTemplate,並在主中繼器的OnItemDataBound事件做以下

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
{ 
    DataRowView row = (DataRowView)e.Item.DataItem; 

    Repeater nestedRepeater = e.Item.FindControl("NestedRepeater") as Repeater; 
    nestedRepeater.DataSource = getSavingsPerCustomer(row["customerID"]); 
    nestedRepeater.DataBind(); 
} 

凡外中繼的模板有一個客戶名稱和一箇中繼器和內部人有不同的儲蓄

可能不正確的語法,但你的想法

<asp:repeater ID="outer"> 
<HeaderTemplate> 
    <div style="float:left"> 
</HeaderTemplate> 
<ItemTemplate> 
    Customer: <%= Eval(customer)%><br/> 
    <asp:repeater ID="NestedRepeater"> 
      <ItemTemplate> 
      Saving: <%= Eval(saving)%><br/> 
      </ItemTemplate> 
    </asp:repeater> 
</ItemTemplate> 
<FooterTemplate> 
    </div> 
</FooterTemplate> 
</asp:repeater> 

Similar SO question: Repeater in Repeater

1

您可以使用帶有AutoGenerateColumns =「true」的GridView。 這將根據您綁定的數據源創建您的collumns。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"> 
</asp:GridView> 

考慮這個類

public class A 
{ 
    public string Field1 { get; set; } 
    public int Field2 { get; set; } 
} 

而這種代碼

GridView1.DataSource = new List<A>() { 
    new A() { Field1 = "a", Field2 = 1 }, 
    new A() { Field1 = "b", Field2 = 2 }, 
    new A() { Field1 = "c", Field2 = 3 }, 
}; 
GridView1.DataBind(); 

這將生成一個HTML表以名爲Field 1和Field2與相應的3排列。像這樣的東西。

<table> 
    <tbody> 
     <tr> 
      <th scope=col>Field1</th> 
      <th scope=col>Field2</th> 
     </tr> 
     <tr> 
      <td>a</td> 
      <td>1</td> 
     </tr> 
     <tr> 
      <td>b</td> 
      <td>2</td> 
     </tr> 
     <tr> 
      <td>c</td> 
      <td>3</td> 
     </tr> 
    </tbody> 
</table> 

如果您將數據源更改爲具有不同列的另一個源,它將自動爲您生成相應的列。

3

我知道這個問題是一個數據表,但我試圖用對象完成同樣的任務時發現了這個問題,我沒有找到答案,並認爲這對其他人有用。

如果您使用的是已嵌套在其對象的對象,你這樣設置

DataSource='<%# Eval("ChildDataSourceProperty") %>' 

數據源,我呼籲所有其他的答案得出這一結論似乎太複雜

這裏是我的完整的中繼器代碼

<asp:Repeater ID="linkGroups" 
       runat="server" 
       DataSource="add your datasource"> 
    <ItemTemplate> 
     <dt><%# Eval("ParentProperty") %></dt> 
     <dd>     
      <asp:Repeater ID="links" 
          runat="server" 
          DataSource='<%# Eval("ChildDataSourceProperty") %>'> 
       <ItemTemplate> 
        <p><%# Eval("ChildObjectProperty") %></p> 
       </ItemTemplate> 
      </asp:Repeater> 
     </dd> 
    </ItemTemplate> 
</asp:Repeater>