2009-02-26 4 views
1

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

Могу я просто сделать что-то подобное для каждого состояния? Если да, то где?

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

Любые идеи?

Благодаря

ответ

2

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

/// <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); 
    } 

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

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

+0

Я действительно пытался, но не такой удачи. –

+0

Попробуйте поместить его в другой проект и вернув dll. – kemiller2002

+0

Уже сделано сэр. –

0

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

protected override void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.Items.Add(new ListItem("Illinois","IL")); 
    } 
} 
0
<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

Я вообще не знаю VB.net, но может ли это иметь какое-то отношение к использованию MyBase для элементов или рендеринга? – kemiller2002

+0

Kevin, я только что заменил MyBase на Me (VB этот эквивалент), и то же самое ... –

0
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

Я пробовал это - и все, что я получаю, это пустой выпадающий список, но в исходном представлении я получаю это: