5

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

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

何か案は?

4

2 に答える 2

16

ユーザーコントロールではなく、カスタムコントロールで 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>
于 2008-10-24T10:02:22.003 に答える
1

コメントで、あなたはあなたの目標を明確にします:「私がそれでやりたいのは、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の初期値として空白、または「都市を選択」などのテキストを含める場合に便利です。

于 2008-10-24T13:02:17.807 に答える