Nella compilazione di form è spesso utile obbligare l'utente a scegliere, come valore per un campo, un termine da un "dizionario", come accade con l'utilizzo del controllo DropDownList presente nel .NET Framework o nello corrispettivo tag <select> dell'HTML.
In situazioni particolari, però, può essere necessario permettere all'utente di editare una voce esistente o aggiungerne una nuova per l'esigenza specifica.
Questa funzionalità non è disponibile nel control DropDownList, pertanto può essere utile realizzare un custom control da potere riutilizzare nei progetti futuri.
Realizzazione del Custom Control
Per ottenere le funzionalità desiderate è possibile creare un composite custom web control (controllo composto) realizzato integrando un normale controllo HtmlInputText con un ListBox.
Senza dilungarmi sulle differenze tra i composite control e i normali custom control (individuabili su MSDN seguendo questo link ) vediamo le fasi salienti nella realizzazione:
Interfaccia INamingContainer
E' necessario implementare l'interfaccia INamingContainer affinché il controllo sia in grado di indirizzare gli eventi di postback ai controlli figli.
Questa interfaccia, inoltre, garantisce che i controlli che compongono il composite control abbiano nomi univoci, che ci mette al riparo da possibili conflitti negli ID nel caso in cui in una pagina siano utilizzate più istanze dello stesso controllo.
Implements INamingContainerProprietà del controllo
Questo controllo dovrà esporre, come per le DropDownList, le proprietà per impostare il testo e il valore associato alla lista, nonchè la sorgente da cui prelevare i dati con cui riempire il ListBox:
- Text
- Value
- DataSource
- DataValueField
- DataTextField
Ed ecco l'implementazione:
Inherits System.Web.UI.WebControls.WebControl
Implements INamingContainer
Dim txt As System.Web.UI.HtmlControls.HtmlInputText
Dim val As System.Web.UI.HtmlControls.HtmlInputHidden
Dim lnk As System.Web.UI.HtmlControls.HtmlAnchor
Dim lst As System.Web.UI.WebControls.ListBox
Private mtxtValue As String
Private mvalValue As String
Private mDictionary As DataView
Private mDictionaryValueField As String
Private mDictionaryTextField As String
<Bindable(True), Category("Appearance"), DefaultValue(""), Description("The text value")> Property Text() As String
Get
Return txt.Value
End Get
Set(ByVal Value As String)
mtxtValue = Value
End Set
End Property
<Bindable(True), Category("Appearance"), DefaultValue(""), Description("The text value")> Property Value() As String
Get
Return val.Value
End Get
Set(ByVal Value As String)
mvalValue = Value
End Set
End Property
<Bindable(True), Category("Data"), DefaultValue(""), Description("The datasource used to populate the list with items")> Property DataSource() As DataView
Get
Return mDictionary
End Get
Set(ByVal Value As DataView)
mDictionary = Value
End Set
End Property
<Bindable(True), Category("Data"), DefaultValue("")> Property DataValueField() As String
Get
Return mDictionaryValueField
End Get
Set(ByVal Value As String)
mDictionaryValueField = Value
End Set
End Property
<Bindable(True), Category("Data"), DefaultValue("")> Property DataTextField() As String
Get
Return mDictionaryTextField
End Get
Set(ByVal Value As String)
mDictionaryTextField = Value
End Set
End PropertyAttenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Contenuti

Stampa
Download



