İç içe geçmiş bir hiyerarşiyi temsil eden bir sınıfım (MyClass) var, dolayısıyla sınıfın bir MyClass koleksiyonu olan bir özelliği var. Sınıfım da ben bir Tekrarlayıcı vardı bir kullanıcı denetimi oluşturmak umuyordum, bir web sayfasında göstermek için bir başlık, tesisiTekrarlayıcıya kullanıcı denetimi dinamik olarak ekleme
sahiptir. Öğe şablonunda, title özelliğini görüntülemek tam anlamıyla olurdu ve tekrarlayıcının ItemCreated olayında, usercontrol'ün yeni bir örneğini oluşturabilir ve tekrarlayıcıdaki mevcut öğeye ekleyebilirim.
Sorunum, usercontrol uygulamasında Page_Load olayı harekete geçtiğinde, denetim dinamik olarak eklendiyse, EnsureChildControls çağırsam bile repMyClass repeater poroperty değeri sıfırdır. Burada bir şey mi eksik? Eğer bir tekrarlayıcı oluşturursam ve userctonrol'umu öğe şablonuna bıraksam iyi çalışır. Bunu dinamik olarak çalışamıyorum mu?
Kullanıcı Kontrolü:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyControl.ascx.cs" Inherits="MyControl" %>
Items:<br/>
<asp:Repeater ID="repMyClass" runat="server" EnableViewState="false"
OnItemCreated="repMenuItems_ItemCreated">
<HeaderTemplate><ul><HeaderTemplate>
<ItemTemplate>
<li><%# Eval("Title") %>
<div><asp:PlaceHolder ID="SubItemPlaceholder" runat="server" /></div>
</li></ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
Kullanıcı Kontrol Kodu: İstediğiniz ve yük durumunda kullanmak özelliğini alır kontrolde başka yapıcı olun ve sonra geçebilir
public partial class MyControl: System.Web.UI.UserControl
{
public IEnumerable<MyClass> ChildItems { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
this.repMyClass.DataSource = ChildItems;
this.repMyClass.DataBind();
}
protected void repMenuItems_ItemCreated(object Sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
//Get the MyClass instance for this repeater item
MyClass mcCurrent = (MyClass)e.Item.DataItem;
//If the MyClass instance has child instances
if (mcCurrent.Children != null && mcCurrent.Children.Length > 0)
{
//Add a new user control and set it's property so it can bind
PlaceHolder ph = (PlaceHolder)e.Item.FindControl("SubItemPlaceholder");
MyControl ctl = (MyControl)Page.LoadControl(typeof(MyControl),new object[] {});
ctl.ChildItems = mcCurrent.Children;
ph.Controls.Add(ctl);
}
}
}
}
Bunu açıklamak ve belki de temizlemek için bunu düzenleyebilir misiniz? Belki de bu cümlenin tamamlanmayan yarısını düzenlediniz galiba? "Sorunum, dinamik olarak eklenen kontroller için Page_Load olayı ilk defa, repNyClass repeater poroperty null" olduğunda – chrismay