2008-10-24 22 views
5

Quiero crear una subclase de la DropDownList incorporada en ASP.NET para que pueda agregarle funcionalidad y usarla en mis páginas. Intenté hacer esto con un UserControl pero encontré que no expone el DropDownList interno (lógicamente, supongo). He buscado la respuesta en Google, pero no puedo encontrar nada.Subclase de DropDownList en ASP.NET

He llegado a escribir la clase actual, y es posible hacer una subclase de DropDownList, pero no puedo registrar el archivo en mi página ASP.NET y utilizarlo en la vista de origen. Tal vez me faltan algunas propiedades en mi clase?

¿Alguna idea?

+0

¿Realmente necesita ampliarlo? ¿o puede tener un control de usuario con el DDL y luego conectar los diversos eventos (OnSelectedIndexChanged, OnDataBinding, etc.) dentro de su control de usuario para agregar su propia funcionalidad cuando ocurre uno de esos eventos? ¿Qué tipo de funcionalidad adicional estás tratando de agregar? –

+0

Lo único que quiero hacer con él es agregar una propiedad InitialValue que defina el primer valor que siempre está presente en el DDL. – deadtime

+0

¿Sería sensato exponer el DDL como innerDropDownList o algo así? – deadtime

Respuesta

15

Quiere extender DropDownList en un control personalizado ... no en un control de usuario.

Cree un nuevo proyecto de biblioteca de clases llamado MyLibrary.

Añadir una clase llamada 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 
    } 
} 
} 

Una vez que compila su biblioteca, puede agregar una referencia a él en su aplicación web.

Y un TagPrefix en su web.config

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

que debe permitir que usted agregue esto a su aspx/de

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

+1 Esta es una excelente descripción de cómo crear controles personalizados que heredan su funcionalidad de los objetos básicos de ASP.NET. ¡Muy claro y conciso! – kdmurray

0

ascx En un comentario, a clarificar su objetivo: "El único Lo que quiero hacer con él es agregar una propiedad InitialValue que defina el primer valor que siempre está presente en el DDL ".

No creo que necesite crear un control de usuario especial o un control personalizado para lograr eso.

A menudo uso este código en todas mis aplicaciones web para completar los controles de lista. Pasa un booleano que indica si se debe agregar un ListItem adicional en la parte superior de la lista y el texto de ese elemento.

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); 
    } 

Esto es útil, por ejemplo, si desea que todos los DropDownList que tiene como su valor inicial en blanco, o de texto como "Seleccionar una ciudad".

Cuestiones relacionadas