Navigant aujourd'hui entre MVC et WebForm, je profite de ce poste pour exhumer un vieux bout de code dont je me suis déjà servi un bon nombre de fois pour n’afficher l’InserItemTemplate d’un control de donnée WebForm que lorsque l’on ne a besoin.

L’idée est simple : n’afficher l’InserItemTemplate que lorsque l’utilisateur click sur un bouton (genre “Inserer un nouvel enregistrement”).

Pour ce faire j’ai opté pour une solution tout aussi simple que la problématique : Utiliser la propriété InsertItemPosition pour afficher l’InsertItem position quand il est demandé.

Ce qui donne côté aspx:

<asp:updatepanel id="UpdatePanel1" runat="server">
     <contenttemplate>
       <asp:listview id="ListView1" runat="server" oniteminserted="ListView1_ItemInserted">
             <edititemtemplate>
             </edititemtemplate>
             <insertitemtemplate>
             </insertitemtemplate>
             <itemtemplate>
             </itemtemplate>
       </asp:listview>
     </contenttemplate>
 </asp:updatepanel>
<asp:button id="Button1" onclick="Button1_Click" runat="server" text="Button">
</asp:button>

Et côté code behind :

protected void Page_Load(object sender, EventArgs e)
{
     if (!this.Page.IsPostBack)
     {
          this.ListView1.InsertItemPosition = InsertItemPosition.None;
     }
}

protected void Button1_Click(object sender, EventArgs e)
{
     this.ListView1.InsertItemPosition = InsertItemPosition.LastItem;
}

protected void ListView1_ItemInserted(object sender, ListViewInsertedEventArgs e)
{
     this.ListView1.InsertItemPosition = InsertItemPosition.None;
}

Plustôt simple non?

Certains préfèreront peut-être un panel visible/invisible ?