質問

ASP.NETに組み込まれたDropDownListをサブクラス化して、機能を追加してページで使用できるようにします。 UserControlでこれを試しましたが、内部DropDownListが公開されていないことがわかりました(論理的には推測します)。私は答えをグーグルで調べましたが、何も見つかりません。

実際のクラスを書くところまで来ました。DropDownListからサブクラス化することは可能ですが、ASP.NETページにファイルを登録してソースビューで使用することはできません。クラスにいくつかのプロパティがありませんか?

アイデアはありますか

役に立ちましたか?

解決

ユーザーコントロールではなく、カスタムコントロールでDropDownListを拡張します。

MyLibraryという新しいクラスライブラリプロジェクトを作成します。

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

ライブラリをコンパイルしたら、Webアプリケーションでライブラリへの参照を追加できます。

そして、web.configのtagprefix

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

これにより、これをaspx / ascxの

に追加できるようになります。
<my:MyDropDownList ID="myDDl" runat="server">
    ...
</my:MyDropDownList>

他のヒント

コメントで、目標を明確にします:&quot;やりたいことは、DDLに常に存在する最初の値を定義するInitialValueプロパティを追加することだけです

特別なユーザーコントロールまたはカスタムコントロールを作成してそれを実現する必要はないと思います。

リストコントロールにデータを入力するために、Webアプリ全体でこのコードをよく使用します。追加のListItemをリストの上部に追加するかどうかを示すブール値と、そのアイテムのテキストを渡します。

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

これは、たとえば、すべてのDropDownListに初期値として空白または「都市を選択」などのテキストを含める場合に便利です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top