Question

Je souhaite sous-classer la liste DropDownList intégrée dans ASP.NET afin de pouvoir y ajouter des fonctionnalités et de les utiliser dans mes pages. J'ai essayé de faire cela avec un UserControl mais j'ai constaté qu'il n'exposait pas la liste interne DropDownList (logiquement, je suppose). J'ai googlé pour la réponse mais je ne trouve rien.

J'en suis même à l'écriture de la classe actuelle et il est possible de sous-classer à partir de DropDownList mais je ne parviens pas à enregistrer le fichier dans ma page ASP.NET et à l'utiliser dans la vue source. Peut-être qu'il me manque des propriétés dans ma classe?

Des idées?

Était-ce utile?

La solution

Vous souhaitez étendre DropDownList dans un contrôle personnalisé ... pas dans un contrôle utilisateur.

Créez un nouveau projet de bibliothèque de classes appelé MyLibrary.

Ajouter une classe appelée 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
    }
}
}

Une fois votre bibliothèque compilée, vous pouvez y ajouter une référence dans votre application Web.

Et un préfixe tag dans votre web.config

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

Cela devrait vous permettre d'ajouter ceci à vos aspx / ascx

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

Autres conseils

Dans un commentaire, vous précisez votre objectif: "La seule chose que je veuille faire est d'ajouter une propriété InitialValue qui définit la première valeur toujours présente dans le DDL."

Je ne pense pas que vous ayez besoin de créer un contrôle utilisateur spécial ou un contrôle personnalisé pour accomplir cela.

J'utilise souvent ce code dans mes applications Web pour renseigner les contrôles de liste. Vous transmettez un booléen indiquant si un ListItem supplémentaire doit être ajouté en haut de la liste et le texte de cet élément.

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

Ceci est utile, par exemple, si vous souhaitez que chaque DropDownList ait pour valeur initiale un blanc ou un texte tel que "Sélectionner une ville".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top