/ / Добавяне на възможност за предоставяне на елементите в списъка с композитен контрол с DropDownLIst - asp.net, падащо меню, composite-controls

Добавяне на възможност за предоставяне на елементи от списъка на композитен контрол с DropDownLIst - asp.net, падащо меню, composite-controls

Създавам композитен контрол за DropDownList (който също включва етикет).

Идеята е, че мога да използвам контрола си като списък с падащи менюта, но също да го хвърлям върху страницата пред DDL.

Имам това, което работи перфектно за текстовите полета, но се борим с DDL поради компонента за събиране (или Datasource) за попълване на 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 компонент за летене с него.

Отговори:

1 за отговор № 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;
}
}

0 за отговор № 2

Най-лесно е да се върнеш към твояоригинална опция за разширяване на контрола DropDownList. Какви проблеми сте имали, за да може етикетът да работи с него? Тези проблеми вероятно са по-лесни за решаване?