2008-10-24 21 views
5

Yerleşik DropDownList'i ASP.NET'e alt sınıflara eklemek istiyorum, böylece işlevsellik ekleyebilir ve sayfalarımda kullanabilirim. Bunu bir UserControl ile yapmayı denedim, ancak dahili DropDownList'i (mantıksal olarak sanırım) açığa çıkarmadığını fark ettim. Cevabı araştırdım ama hiçbir şey bulamadım.ASP.NET'te Alt GörünümDownList

Asıl dersi yazabildiğim kadar geldim ve DropDownList'ten alt sınıf oluşturmak mümkün ama dosyayı ASP.NET sayfama kaydettiremiyorum ve bunu kaynak görünümünde kullanamıyorum. Belki sınıfımda bazı özellikleri kaçırıyor olabilirim?

Herhangi bir fikrin var mı?

+0

Gerçekten uzatmanız gerekiyor mu? veya DDL ile bir kullanıcı kontrolüne sahip olabilirsiniz ve sonra bu olaylardan biri gerçekleştiğinde kendi fonksiyonunuzu eklemek için kullanıcı kontrolünüzün içindeki çeşitli olayları (OnSelectedIndexChanged, OnDataBinding vb.) bağlayabilirsiniz. Ne tür ek işlevler eklemeye çalışıyorsunuz? –

+0

Onunla yapmak istediğim tek şey, DDL'de her zaman bulunan ilk değeri tanımlayan bir InitialValue özelliği eklemektir. – deadtime

+0

DDL'yi sadece innerDropDownList veya başka bir şey olarak göstermek mantıklı olabilir mi? – deadtime

cevap

15

DropDownList ürününü, bir özel denetimde değil, bir kullanıcı denetiminde genişletmek istiyorsunuz.

MyLibrary adlı yeni bir Sınıf Kitaplığı Projesi oluşturun. Eğer kütüphane derlemek kez

web uygulamasında bir referansı ekleyebilir, bir sınıf olarak adlandırılan MyDropDownList.cs

namespace My.Namespace.Controls 
{ 
[ToolboxData("<{0}:MyDropDownList runat=\"server\"></{0}:MyDropDownList>")] 
public class MyDropDownList: DropDownList 
{ 
    // your custom code goes here 
    // e.g. 
    protected override void RenderContents(HtmlTextWriter writer) 
    { 
     //Your own render code 
    } 
} 
} 

ekleyin.

Ve web.config bir TagPrefix bir yorumunda Sizin aspx/.Ascx en

<my:MyDropDownList ID="myDDl" runat="server"> 
    ... 
</my:MyDropDownList> 
+1

+1 Bu, temel ASP.NET nesnelerinden işlevselliğini devralan özel denetimlerin nasıl oluşturulacağının mükemmel bir açıklamasıdır. Çok açık ve özlü! – kdmurray

0

, size hedefe netleştirmek için bu eklemek için izin vermelidir

<add tagPrefix="my" namespace="My.Namespace.Controls" assembly="MyLibrary" /> 

: "Sadece Bununla yapmak istediğim şey, DDL'de her zaman bulunan ilk değeri tanımlayan bir InitialValue özelliği eklemektir. "

Bunu yapmak için özel bir kullanıcı denetimi veya özel denetim oluşturmanız gerektiğini sanmıyorum.

Liste denetimlerini doldurmak için bu kodu web uygulamalarım boyunca kullanırım. Listenin üst kısmına ek bir ListItem eklenip eklenmeyeceğini ve bu öğenin metnini belirten bir boole geçirirsiniz. Her DropDownList böyle "bir şehir seç" olarak başlangıç ​​değerinden boş veya metin olarak sahip olmak istiyorsanız

public static void BindListControl (ListControl ctl, SqlDataReader dr, 
     String textColumn, String valueColumn, bool addBlankRow, string blankRowText) 
    { 
     ctl.Items.Clear(); 
     ctl.DataSource = dr; 
     ctl.DataTextField = textColumn; 
     ctl.DataValueField = valueColumn; 
     ctl.DataBind(); 

     if (addBlankRow == true) ctl.Items.Insert(0, blankRowText); 
    } 

Bu durum, örneğin, yararlıdır.