2017-12-13 2 views
0

Ich habe schon seit 3 ​​Tagen umgesehen, also bitte, jedes Feedback wird geschätzt. Ich habe einen Eltern-Repeater, der die erwarteten Daten zieht, aber ich versuche, einen Kind-Repeater zu verschachteln, die Kontrolle zu finden und die Daten zu füllen. aber bisher hat es nicht funktioniert. Aus irgendeinem Grund wird der unten aufgeführte Nested Repeater nicht ausgewählt, um die richtigen Daten anzuzeigen. Irgendwelche Vorschläge?C# Nested Repeater funktioniert nicht

Asp.Net-Code ist hier:

<asp:Repeater ID="EquipmentRepeater" runat="server" OnItemDataBound="Repeater2_ItemDataBound" > 
      <ItemTemplate> 
       <b>Equipment:</b> 
       <%# DataBinder.Eval(Container.DataItem, "Equip") %>&nbsp; 
       <%# DataBinder.Eval(Container.DataItem, "Location") %>&nbsp; 
       </ItemTemplate> 
     </asp:Repeater> 




protected void Repeater2_ItemDataBound(object sender System.Web.UI.WebControls.RepeaterItemEventArgs e) 
    { 
     SqlConnection con = new SqlConnection(ConString); 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      Repeater Repeater2 = (Repeater)e.Item.FindControl("EquipmentRepeater"); 

      System.Data.DataTable ds = new System.Data.DataTable(); 
      SqlCommand cmd1 = new SqlCommand(" Select HourID, Equip,Location FROM Equip where [email protected]"); 

      cmd1.Parameters.Add("@id", SqlDbType.Int).Value = id; 
      con.Open(); 
      cmd1.Connection = con; 
      cmd1.ExecuteReader(); 
      con.Close(); 
      SqlDataAdapter ad = new SqlDataAdapter(cmd1); 
      // DataTable ds = new DataTable(); 
      ad.Fill(ds); 
      con.Close(); 


      //Need to assign the Data in datatable 
      Repeater2.DataSource = ds; 
      Repeater2.DataBind(); 
     } 

    } 
+0

Ihr Code versucht, denselben Repeater erneut zu füllen. Wo ist dein * verschachtelter * Repeater? –

+2

Wenn "EquipmentRepeater" der verschachtelte Repeater ist, versuchen Sie, Daten in einem eigenen ItemDataBound-Ereignis an es zu binden. Sie müssen das Ereignis des übergeordneten Repeaters verwenden. – VDWWD

+0

Sie haben Recht, ich habe das ItemDataBound auf das Ereignis des Eltern-Repeaters geändert, aber es füllt immer noch NICHT die Daten. Es ist eher so, als ob das Kind Repeater-Steuerelement NICHT funktioniert. Weil ich versucht habe, eine GridView im Parent Repeater einzubauen, aber ohne Glück. – user5711432

Antwort

0

ich es gelöst, gab es zwei Probleme:

1- Der Repeater ItemDataBound in den übergeordneten Repeater werden muß Selbst Handler. 2-das zweite Problem war der ID-Parameter-ID für den Child-Repeater hat keinen Wert So Icreated ein für Id In dem übergeordneten Repeater abgelegt versteckt und nannte es auf ItemDataBound

<asp:HiddenField ID="ID" runat="server" Value='<%# Eval("ID") %>' /> 

protected void Repeater2_ItemDataBound(object sender System.Web.UI.WebControls.RepeaterItemEventArgs e) 
{ 
    SqlConnection con = new SqlConnection(ConString); 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Repeater Repeater2 = (Repeater)e.Item.FindControl("EquipmentRepeater"); 

     System.Data.DataTable ds = new System.Data.DataTable(); 
     SqlCommand cmd1 = new SqlCommand(" Select HourID, Equip,Location FROM Equip where [email protected]"); 

      HiddenField id = (HiddenField)e.Item.FindControl("ID"); 
      int parsedId = int.Parse(id.Value); 
      cmd1.Parameters.Add("@id", SqlDbType.Int).Value = parsedId; 
     con.Open(); 
     cmd1.Connection = con; 
     cmd1.ExecuteReader(); 
     con.Close(); 
     SqlDataAdapter ad = new SqlDataAdapter(cmd1); 
     // DataTable ds = new DataTable(); 
     ad.Fill(ds); 
     con.Close(); 


     //Need to assign the Data in datatable 
     Repeater2.DataSource = ds; 
     Repeater2.DataBind(); 
    } 

} 

Vielen Dank an alle und viel Glück