/ / Dodaj możliwość dostarczania elementów listy do złożonego sterowania za pomocą DropDownLIst - asp.net, rozwijane menu, złożone kontrolki

Dodaj możliwość dostarczania elementów listy do złożonego sterowania za pomocą DropDownLIst - asp.net, rozwijane menu, złożone kontrolki

Tworzę kontrolę złożoną dla DropDownList (która zawiera również etykietę).

Pomysł polega na tym, że mogę używać kontrolki tak jak listy rozwijanej, ale także kazać jej rzucić etykietę na stronę przed DDL.

Mam to doskonale działa dla TextBoxes, ale walczę z DDL z powodu składnika Collection (lub Datasource) do wypełnienia DDL.

Zasadniczo chcę móc zrobić coś takiego:

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

Problem polega na tym, że nie przedłużamKlasa DropDownList dla mojej kontroli, więc nie mogę po prostu pracować z tą magią Potrzebuję wskazówek, aby dowiedzieć się, jak mogę zmienić swoją kontrolę (MyDropDownList), która jest obecnie tylko System.Web.UI.UserControl, do czegoś, co zaakceptuje elementy List w tagu i idealnie, chciałbym móc podłączyć go do źródła danych (te same funkcje, które oferuje regularne DDL).

Próbowałem bez powodzenia, po prostu rozszerzając zwykły DDL, ale nie mogłem dostać Label komponent do latania z nim.

Odpowiedzi:

1 dla odpowiedzi № 1

Po wykonaniu pewnych prac i szukaniu znalazłem rozwiązanie, które działa. Mam nadzieję, że to pomoże komuś innemu w przyszłości:

[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 dla odpowiedzi nr 2

Najłatwiej byłoby wrócić do swojegooryginalna opcja rozszerzenia kontrolki DropDownList. Jakie problemy sprawiły, że wytwórnia działała z tym problemem? Te problemy są prawdopodobnie łatwiejsze do rozwiązania?