Ciao a tutti, con questo primo post di Marzo partiamo subito aggressive e di codice … come piace al big.
Oggi vedremo come creare una dropDownList per selezionare un determinato tipo di controlli all’interno della nostra pagina asp.net in fase di Design-Time … EEEEEEEEE potrebbe esser la vostra esclamazione … intendo spiegare molto semplicemente come creare una dropdownlist che serve a valorizzare il campo TargetControlID della nostra JWaterMark (o per chi non ha scaricato il mio progetto su codeplex, attualmente all’Alpha 1.3 con un buon 175 download, creare la lista che serve a valorizzare la property ControlToValidate dei Validator di asp.net)
Vi assicuro che è più complicato spiegare cosa stiamo andando a creare piuttosto che farlo.
Lo screenShoot mi sembra che parli da solo, perfetto partiamo con il codice :
1. CREAZIONE DELL’ATTRIBUTO
La prima cosa da fare è creare un attributo adeguato con il quale decorare le nostre property a cui dovrà esser assegnato l’ID di un particolare tipo di controllo (nel nostro caso con JWaterMark, solo TextBox). Il nostro attributo dovrà aver la possibilità di specificare quale tipo di controllo deve filtrare.
1: /// <summary>
2: /// Create list with control that can use for target
3: /// </summary>
4: /// <typeparam name="T">Type of target control</typeparam>
5: public class TargetControlIDConverter<T> : ControlIDConverter
Come potete vedere questa classe soddisfa a pieno le nostre richieste, è un’attributo in quanto eredita da ControlIDConverter, questo attributo è quello usato per decorare la property ControlToValidate dei validator di asp.net; l’utilizzo dei Generics ci da la possibilità di passare il tipo di controllo che ci interessa filtrare.
2. FILTRARE I CONTROLLI DELLA PAGINA ASP.NET
Ora dobbiamo creare il metodo per filtrare i controlli contenuti nella pagina asp.net a seconda di quello che ci interessa selezionare, per farlo basta fare l’override del Method FilterControl, che appunto filtra i controlli.
1: /// <summary>
2: /// Returns a value indicating whether the control ID of the specified control is added to the
3: /// System.ComponentModel.TypeConverter.StandardValuesCollection that is returned by the
4: /// System.Web.UI.WebControls.ControlIDConverter.GetStandardValues(System.ComponentModel.ITypeDescriptorContext) method
5: /// </summary>
6: /// <param name="control">The control instance to test for inclusion in the System.ComponentModel.TypeConverter.StandardValuesCollection</param>
7: /// <returns>true in all cases</returns>
8: protected override bool FilterControl(System.Web.UI.Control control)
9: {
10: return typeof(T).IsInstanceOfType(control);
11: }
Ecco fatto, pulito semplice chirurgico. Tanto per capirci, preleviamo il tipo di T e in base a questo filtriamo la collection di controlli da tornare.
3. DECORARE LA NOSTRA PROPERTY
Siamo alla battuta finale, ora dobbiamo solamente decorare la nostra property con questo nostro nuovo è al quanto stupendo attribute.
1: /// <summary>
2: /// Gets or sets id of target control
3: /// </summary>
4: [TypeConverter(typeof(TargetControlIDConverter<TextBox>))]
5: [Description("TextBox Target")]
6: public override string TargetControlID
7: {
8: get
9: {
10: return base.TargetControlID;
11: }
12:
13: set
14: {
15: base.TargetControlID = value;
16: }
17: }
Ecco fatto ragazzi, ora compilate fate il drag&drop del vostro controllo all’interno del designer di Vs e provare le property … fantastico e soprattutto comodo come poche cose nella vita.
Vi ricordo che se cercate i sorgenti completi li potete trovare sul codeplex
Condividi Post : 

