2016-08-11 5 views
0

Das Problem ist, wenn ich dt1 als rpt2.DataSource (verschachtelte Repeater-Quelle) das Programm läuft gut, aber wie ich dt2 als Quelle verwenden (und Eval() ändert sich entsprechend) die Ausgaben sind von nur Erster Repeater.Verschachtelte Repeater mit DataTable Asp.net

Ausgang für dt2 =>

1 Rams

2 Prozessoren

3 Grafikkarten

Ausgabe, wenn i

1 Rams

Änderungen für DT1 => machen 1

2 Processors

3 Grafikkarten

<body> 
<form id="form1" runat="server"> 
    <div> 
     <asp:Repeater ID="my_repeater1" runat="server" OnItemDataBound="my_repeater1_ItemDataBound"> 
      <ItemTemplate> 
       <asp:Label Text='<%#Eval("ID")%>' ID="my_text1" runat="server" /> 
       <asp:Label Text='<%#Eval("CATEGORY")%>' ID="my_text2" runat="server" /> 
       <br /> 
       <asp:Repeater runat="server" ID="my_repeater2"> 
        <ItemTemplate> 
         <asp:Label Text='<%#Eval("ITEMS")%>' ID="lbl1" runat="server" /> 
         <br /> 
        </ItemTemplate> 
       </asp:Repeater> 
      </ItemTemplate> 
     </asp:Repeater> 
    </div> 
</form> 

public partial class WebForm1 : System.Web.UI.Page 
{ 
    DataTable dt1 = new DataTable(); 
    DataTable dt2 = new DataTable(); 
    DataTable dt3 = new DataTable(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     dt1.Columns.Add("ID"); 
     dt1.Columns.Add("CATEGORY"); 
     dt1.Rows.Add("1", "Rams"); 
     dt1.Rows.Add("2", "Processors"); 
     dt1.Rows.Add("3", "GraphicCards"); 
     my_repeater1.DataSource = dt1; 
     my_repeater1.DataBind(); 

     dt2.Columns.Add("ID"); 
     dt2.Columns.Add("ITEMS"); 
     dt2.Rows.Add("1", "DDR1"); 
     dt2.Rows.Add("2", "DDR2"); 
     dt2.Rows.Add("3", "DDR3"); 

    } 

    protected void my_repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     Repeater rpt2 = (Repeater)e.Item.FindControl("my_repeater2"); 
     rpt2.DataSource = dt2; 
     rpt2.DataBind(); 

    } 
} 
+0

so kam ich zu wissen, wenn ich my_repeater1 nach dem Zuweisen von Zeilen und Spalten zu allen DataTables, dann das Programm läuft gut, so dass das Problem der Reihenfolge war, aber ich verstehe nicht, warum Reihenfolge hier zählt? –

Antwort

1

Wenn my_repeater1.DataBind() .NET my_repeater1 Aufbau beginnt ausgeführt wird. Für jede Zeile, die zu my_repeater1 hinzugefügt wird, wird my_repeater1_ItemDataBound aufgerufen. Und da Sie dt2 als Quelle für den verschachtelten Repeater verwenden, erhalten Sie keine Daten, da dt2 noch nicht mit Daten gefüllt ist. Dies geschieht nur in Ihrem Beispiel, nachdem das Erstellen von my_repeater1 abgeschlossen ist.