Realizzare un metodo FindControl generico utilizzando gli Extension Method

di , in ASP.NET 3.5, ListView, DataBinding,

Tra le novità introdotte con C# 3.0, gli Extension Method rappresentano sicuramente una tra le più interessanti.
Senza dilungarsi troppo, un Extesion Method è uno speciale metodo statico che è possibile utilizzare come un qualsiasi metodo d'istanza del tipo che va ad "estendere" .
Nello script realizzeremo un semplice Extesione Method per creare un metodo FindControl generico, in modo tale da evitare di dover più volte riscrivere il codice necessario al cast.

namespace AspItalia.Common.ExtensionMethod.WebControlExtension
{
  public static class ControlExtension
  {
    public static bool TryFindControl<T>(this Control control, string id, out T returnWebControl) where T : Control
    {
      T _control = control.FindControl(id) as T;

      if (_control == null)
      {
        returnWebControl = null;
        return false;
      }
      else
      {
        returnWebControl = _control;
        _control = null;
        return true;
      }
    }
  }
}

Da notare l'uso particolare del modificatore this prima dell'argomento control di tipo Control, perchè questo sarà il tipo che verrà "esteso" con il nuovo metodo.
Per utilizzare l'Extension Method sarà sufficiente importare il namespace in cui si trova, per poi utilizzarlo in questo modo:

protected void MyGridView_RowCreated (object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    TextBox _textBox ;
    if (e.Row.TryFindControl<TextBox>("SurnameTextBox", out _textBox)
      _textBox.BackColor = System.Drawing.Color.Red;
  }
}


L'esempio mostra un ipotetico event handler del metodo RowCreated di una GridView, dove il TryFindControl restituisce true se riesce a recuperare il controllo desiderato e valorizza di conseguenza la variabile _textBox con il controllo specificato.

Commenti

Visualizza/aggiungi commenti

Realizzare un metodo FindControl generico utilizzando gli Extension Method (#955) 1010 3
| Condividi su: Twitter, Facebook, LinkedIn, Google+

Per inserire un commento, devi avere un account.

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

Approfondimenti

I più letti di oggi