Costruzione di composite control

di Valeriomarco Montanari, in ASP.NET,
  • 0
  • 0
  • 0
  • 26,24 KB

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 INamingContainer

Proprietà 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 Property
2 pagine in totale: 1 2

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti