2016-04-06 14 views
2

DropDownList ve diğer bazı denetimleri içeren bir kullanıcı denetimi oluşturdum. Kullanıcı denetimimin, açılır listeyi doldurmak için verileri almasına yardımcı olacak KullanıcıAdı adlı bir genel özelliği vardır.Üst sayfa veri denetimi bağlandıktan sonra Kullanıcı Denetimi'nde sonraki olay nedir?

<uc1:MyUserControl runat="server" ID="ucDetails" UserName = '<%# Eval("UserName")%>' /> 

Kullanıcı denetim özelliklerinin ne zaman ayarlandığını öğrendim. KullanıcıAdı için (yukarıdaki örneğe bakın), usercontrol'ın page_Load sırasında değer ayarlanmıyor. Ana sayfanın DataBind olayı sırasında ayarlanmıştır, bu, Kullanıcı Kontrolünün page_load olayından sonraki yoldur.

Kullanıcı Denetimi potansiyelinden, geri alma verilerini çağırabildiğim sonraki en yakın olay nedir ve sonra onu DropDownList öğesine bağlarm?

Yardımlarınız için teşekkürler. Kurulum için liste görünümü denetimi, sonra ListView her öğe için olay bağlı verilerin sırasında listede aşağı damla istiyorsanız

+1

Bu, başka bir veri bağlı denetiminde eklediğiniz kullanıcı denetimi gibi görünüyor mu? Bu durumda, ana denetimin verileri bağlanana kadar mevcut olmaz. Sanırım açılan listeniz kullanıcı adına göre değişir veya filtrelenir mi? Bu gibi durumlarda, veri kaynağını belki de sıradaki satırdaki uygun listeye ayarlayabilirsiniz. – Bert

+0

Maalesef, kullanıcı kontrolünün kendi başına bir veri kontrolünün parçası olduğunu belirtmeyi unuttum. Ancak, RowDataBound ile ilgili öneriniz hakkında biraz açık olabilir misiniz? – Richard77

+0

Kullanıcınızda hangi tür veriye bağlı kontrol var? Veriye bağlı denetimin türüne bağlı olarak, üst denetimler veri bağlama olayını veya üst öğedeki her satır/öğe için veri bağlama olayını kullanabilirsiniz. Daha fazla bilgi ile bir örnek verebilirim. – TheRotag

cevap

3

, ItemDataBound olay için bir işleyici ekleyin:

<asp:ListView ID="listView1" runat="server" OnItemDataBound="listView1_ItemDataBound"> 

Şimdi, bu içinde senin olay işleyicisi kod arkada, bu satır/öğe için kullanıcı denetiminin örneğini almak:

Sonra
protected void listView1_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    var userControl = e.Item.FindControl("ucDetails") as UserControlClassName; 
} 

size ne gerek yapabilirsiniz kullanıcı kumanda üzerindeki bu tür üzerinde KullanıcıAdı özelliğini ayarlayarak ve/veya açılan liste öğelerinizi ayarlamak.

Not: Her öğe için farklı özelliğini ayarlamak gerekiyorsa, ListViewItemEventArgs nesneden geçerli öğe için veri nesnesini alabilirsiniz: e.Item.DataItem as [whatever type the data item should be]. Eğer listesi açılan her zaman doğru KullanıcıAdı ayarlanır sonra doldurulur emin olmak istiyorsanız

Alternatif olarak, KullanıcıAdı özelliği için ayarlayıcı güncelleme olabilir, böylece (geçerli bir kullanıcı adı değil ayarlanmış eğer null veya boş vb.), (setter) açılır listeyi doldurmak için bir yöntem çağırır. Böylelikle, sayfanın yaşam döngüsünde nerede olursanız olun, ListView'inizi bağlar. Böyle bir şey olabilir:

public string UserName 
{ 
    get { return _username; } 
    set 
    { 
     // Make sure new value is valid (not null/empty, exists, etc.) 
     if (string.IsNullOrEmpty(value)) 
      // Do something (throw exception, show error, etc.) 
     else 
     { 
      _userName = value; 
      SetupDropDownList(); 
     } 
    } 
} 
private string _userName; 
İlgili konular