/ / Adicionar capacidade de fornecer itens de lista para controle composto com DropDownLIst - asp.net, menu suspenso, controles compostos

Adicionar capacidade de fornecer itens de lista para controle composto com DropDownLIst - asp.net, menu suspenso, controles compostos

Eu estou criando um controle composto para um DropDownList (que também inclui um rótulo).

A ideia é que eu posso usar o meu controle como uma lista suspensa, mas também ter um rótulo na página em frente ao DDL.

Eu tenho isso funcionando perfeitamente para TextBoxes, mas estou lutando com o DDL por causa do componente Collection (ou Datasource) para preencher o DDL.

Basicamente eu quero ser capaz de fazer algo assim:

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

O problema é que eu não estou estendendoDropDownList classe para o meu controle, então eu não posso simplesmente trabalhar com essa mágica. Eu preciso de algumas dicas para descobrir como eu posso transformar meu controle (MyDropDownList), que atualmente é apenas um System.Web.UI.UserControl, em algo que aceita itens de lista dentro da tag e, idealmente, eu gostaria de poder conectá-lo a uma fonte de dados (as mesmas funções que a DDL normal oferece).

Eu tentei sem sorte apenas estendendo o DDL regular, mas não consegui o Label componente para voar com ele.

Respostas:

1 para resposta № 1

Depois de cavar e procurar, encontrei uma solução que funciona. Espero que isso ajude alguém no futuro:

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

0 para resposta № 2

A coisa mais fácil seria voltar para o seuopção original de estender o controle DropDownList. Quais problemas você teve para conseguir que o rótulo funcionasse? Esses problemas são provavelmente mais fáceis de resolver?