2009-02-26 10 views
1

Ich habe die Notwendigkeit für eine Dropdown-Liste mit den US-Staaten drin. Ich könnte diese Dropdown-Liste auf verschiedenen Seiten benötigen. Anstatt immer einen Listeneintrag für jeden Status zu erstellen, möchte ich eine einfache Kontrolle. Ich möchte kein UserControl - Ich möchte das bestehende Dropdown-Listen-Steuerelement erweitern. Ich weiß, dass ich das schon einmal bei einem früheren Arbeitgeber getan habe, aber für das Leben von mir kann ich mich nicht erinnern, wie ich es machen soll!Benutzerdefinierte Dropdown-Liste mit Artikel autopopulated

Kann ich nicht einfach so etwas für jeden Staat machen? Wenn ja, wo?

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

Irgendwelche Ideen da draußen?

Dank

Antwort

2

Alles, was Sie tun müssen, ist eine neue Klasse zu erstellen und von der entsprechenden Kontrolle erben:

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

Im Konstruktor fügen Sie einfach die entsprechenden Listbox Elemente wie Sie haben.

Sie müssen es möglicherweise in ein anderes Projekt einfügen und auf die DLL verweisen. Ich denke, ich erinnere mich an etwas, aber es ist schon eine Weile her, seit ich es tun musste.

+0

Ich habe versucht, wirklich das, aber kein Glück. –

+0

Versuchen Sie es in ein anderes Projekt und wiederholen Sie die DLL. – kemiller2002

+0

Bereits fertig Sir. –

0

Extend Steuerelement Dropdownlist und OnLoad-Ereignis überschreiben und Ihre Produkte wie das hinzufügen:

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

Ich kenne VB.net überhaupt nicht, aber könnte es etwas mit der Verwendung von MyBase auf den Elementen oder beim Rendern zu tun haben? – kemiller2002

+0

Kevin, ich habe gerade MyBase durch Me ersetzt (VB ist das Äquivalent), und das gleiche ... –

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

Ich habe das versucht - und alles, was ich bekomme ist ein leeres Dropdown aber in der Quellansicht bekomme ich das:

Verwandte Themen