Настраиваемый выпадающий список с автоматическими пунктами - PullRequest
1 голос
/ 26 февраля 2009

Мне нужен выпадающий список с указанием штатов США. Мне может понадобиться этот выпадающий список на разных страницах. Вместо того, чтобы всегда создавать список элементов для каждого состояния, я хочу простой элемент управления. Я не хочу UserControl - я хочу расширить существующий элемент управления dropdownlist. Я знаю, что делал это раньше у предыдущего работодателя, но я не могу вспомнить, как это сделать!

Разве я не могу просто сделать что-то подобное для каждого штата? Если да, то где?

MyBase.Items.Add(New ListItem("Illinois","IL"))

Есть идеи?

Спасибо

Ответы [ 4 ]

2 голосов
/ 26 февраля 2009

Все, что вам нужно сделать, это создать новый класс и наследовать от соответствующего элемента управления:

/// <summary>
/// </summary>
[DefaultProperty("DataTable"),
     ToolboxData("<{0}:ExtendedDropDownlist runat=server></{0}:ExtendedDropDownlist>")]
public class ExtendedDropDownList : DropDownList


    /// <summary>
    /// Render this control to the output 
    /// parameter specified.
    /// </summary>
    /// <param name="output"> The HTML writer to 
    /// write out to </param>
    protected override void Render(HtmlTextWriter output)
    {
        //output.Write(Text);
        base.Render(output);
    }

В конструкторе просто добавьте соответствующие элементы списка, как у вас.

Возможно, вам придется поместить его в другой проект и ссылаться на DLL. Думаю, я кое-что помню об этом, но прошло уже много времени, как я должен был это сделать.

0 голосов
/ 26 февраля 2009
public class DropDownListStates : System.Web.UI.WebControls.DropDownList
{
    protected override void CreateChildControls()
    {
        if (Items.Count > 0) return;

        Items.Add(new System.Web.UI.WebControls.ListItem("AL"));

        // other states here...

        Items.Add(new System.Web.UI.WebControls.ListItem("WY"));

    }
}
0 голосов
/ 26 февраля 2009
<ToolboxData("<{0}:StateDropDownList runat=server></{0}:StateDropDownList>")> _
Public Class StateDropDownList
    Inherits DropDownList

    Protected Overrides Sub RenderContents(ByVal output As HtmlTextWriter)
        output.Write(Text)
    End Sub

    Protected Overrides Sub RenderChildren(ByVal writer As System.Web.UI.HtmlTextWriter)
        MyBase.RenderChildren(writer)
    End Sub


    Private Sub LoadStates()
        MyBase.Items.Add(New ListItem("Alabama", "AL"))
        'Additional states removed for size
        MyBase.Items.Add(New ListItem("Wyoming", "WY"))
    End Sub

    Public Sub New()
        'tried does not work
        ' LoadStates()
    End Sub

    Private Sub StateDropDownList_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        'tried does not work
        ' LoadStates()
    End Sub


    Private Sub StateDropDownList_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'tried does not work
        'If Not Page.IsPostBack Then
        '    LoadStates()
        'End If
    End Sub

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        MyBase.Render(writer)
    End Sub
End Class
0 голосов
/ 26 февраля 2009

Расширьте элемент управления DropDownList и переопределите событие OnLoad и добавьте свои элементы так:

protected override void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        this.Items.Add(new ListItem("Illinois","IL"));
    }
}
...