1

DropDownList (Label も含む) の複合コントロールを作成しています。

コントロールをドロップダウン リストのように使用できるだけでなく、DDL の前のページにラベルを投げることもできます。

私はこれを TextBoxes に対して完全に機能させていますが、コレクション (またはデータソース) コンポーネントが DDL を設定するため、DDL に苦労しています。

基本的には、次のようなことができるようになりたいです。

<ecc:MyDropDownList ID="AnimalType" runat="server" LabelText="this is what will be in the label">
<asp:ListItem Text="dog" Value="dog" />
<asp:ListItem Text="cat" Value="cat" />
</ecc:MyDropDownList>

問題は、コントロールの DropDownList クラスを拡張していないことです。そのため、その魔法を単純に操作することはできません。現在はただのコントロール(MyDropDownList)を、タグ内のリスト項目を受け入れるものに変える方法を理解するために、いくつかのポインターが必要です。System.Web.UI.UserControl理想的には、それをデータソースにプラグインできるようにしたいと思います(通常の DDL が提供するのと同じ機能)。

通常の DDL を拡張するだけでうまくいきませんでしたが、Labelコンポーネントを飛ばすことができませんでした。

4

2 に答える 2

1

掘り下げて検索した後、機能する解決策を見つけました。うまくいけば、これは将来誰かを助けるでしょう:

[ParseChildren(true, "Items")]
public class EDropDownList : CompositeControl, IValidatedFields
{
    public string PromptingText { get; set; }
    public string Value { get; set; }
    public Label __Label { get; set; }
    private ListItemCollection _items;
    public DropDownList __DropDownList;
    public ListItemCollection Items 
    {
        get { return _items; }
        set
        {
            if (_items != value)
            {
                _items = value;
            }
        }
    }

    public string Type { get { return "DropDownList"; } }


    public EDropDownList()
    {
        __Label = new Label();
    }
    protected override void CreateChildControls()
    {
        __DropDownList = new DropDownList();
        foreach (ListItem myItem in _items)
        {
            __DropDownList.Items.Add(myItem);
        }
        Controls.AddAt(0, __Label);
        Controls.AddAt(1, __DropDownList);
    }

    protected override void OnLoad(EventArgs e)
    {
        // label section            
        __Label.Text = PromptingText+"<br />";
        __Label.ForeColor = Color.Red;
        __Label.Visible = false;
        // ddl section
        if (Page.IsPostBack)
            Value = __DropDownList.SelectedValue;
    }
}
于 2010-05-07T20:04:12.503 に答える
0

最も簡単な方法は、DropDownList コントロールを拡張する元のオプションに戻ることです。レーベルがそれを扱うのにどのような問題がありましたか? それらの問題はおそらく解決しやすいですか?

于 2010-05-07T14:30:52.530 に答える