Evitare la duplicazione di InsertItemTemplate e EditItemTemplate nel controllo FormView

Il controllo FormView è uno dei controlli più utilizzati nelle pagine Asp.Net in quanto rappresenta l'interfaccia per i metodi di Insert, Update e Select sul database.

Una cosa che ho subito trovato noiosa è il fatto che i template di Insert e di Edit sono praticamente uguali al 99% e ci vuole molto tempo per duplicarli e manutenerli (come al solito la ridondanza non paga).

Anche se Visual Studio genera in automatico un primo template facilmente modificabile resta comunque molto gravoso lo sforzo per inserire e modificare tutti i controlli di validazione, dare i nomi giusti ai controlli ed eventualmente aggiungere altre proprietà.

Sul forum Asp.Net ho trovato una soluzione molto elegante ed efficace (vedi "FormView: InsertItemTemplate and EditItemTemplate? Why do I need the same code twice?").
In pratica se si elimina completamente l'InsertItemTemplate viene utilizzato in automatico l'EditItemTemplate sia per l'inserimento che per la modifica.

Per essere completa la soluzione deve integrare anche il suggerimento di questo post:  "Reuse code for EditTemplate & InsertTemplate of FormView"

Dato che i linkbutton Insert e Update devono inviare due diversi comandi a seconda dello stato della formview in fase di Databinding della formview è necessario inserire nell'EditItemTemplate i linkbutton di Insert e Update e abilitarli/disabilitarli di conseguenza:

protected void FormView1_DataBound(object sender, EventArgs e)

{

    if (FormView1.CurrentMode == FormViewMode.Edit)

    {

        LinkButton InsertButton =

            FormView1.FindControl("InsertButton") as LinkButton;

        LinkButton UpdateButton =

            FormView1.FindControl("UpdateButton") as LinkButton;

 

        InsertButton.Visible = false;

        UpdateButton.Visible = true;

    }

    else if (FormView1.CurrentMode == FormViewMode.Insert)

    {

        LinkButton InsertButton =

            FormView1.FindControl("InsertButton") as LinkButton;

        LinkButton UpdateButton =

            FormView1.FindControl("UpdateButton") as LinkButton;

 

        InsertButton.Visible = true;

        UpdateButton.Visible = false;

    }

}

In questa fase è possibile gestire anche eventuali altre differenze che potessero esserci tra i due template.

Share

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.