09
Gen
08

Un Gridview con campo inserimento nel footer

Nella maggior parte delle applicazioni, l’utilizzo combinato di un Gridview e DetailView permettono un efficiente gestione di una vista master/dettaglio di prodotti, anagrafiche, ecc… spesso però l’utilizzo di tale sistema può risultare eccessivo, specie nel caso che il numero di campi da modificare o aggiungere risultino pochi.Il controllo GridView è senz’altro il controllo più utilizzato dagli sviluppatori AspNet, tuttavia il suo limite è che non prevede nativamente una funzionalità di inserimento come quella offerta appunto dal DetailView. Dunque, come coniugare le pratiche funzionalità di ordinamento ed editing del GridView con quelle di inserimento del DetailView?
La risposta è semplice: con le funzionalità offerte dai template. In questo esempio vediamo come inserire dei campi di inserimento nel footer di un controllo GridView con una manciata di codice utente.

GridView
La GridView in esame per semplicità permette l’inserimento, la cancellazione e la modifica di un unico campo; nel caso di inserimento il campo è obbligatorio e validato da un RequiredFieldValidator.

Vediamo in sintesi il markup necessario:

<asp:GridView ID=”GridView1″ runat=”server” AllowPaging=”True” AllowSorting=”True” AutoGenerateColumns=”False” DataKeyNames=”IdCategoria” DataSourceID=”SqlDataSource1″ ShowFooter=”True” nrowcommand=”GridView1_RowCommand” BackColor=”White” BorderColor=”#DEDFDE” BorderStyle=”None” BorderWidth=”1px” CellPadding=”4″ ForeColor=”Black” GridLines=”Vertical”> <PagerSettings Mode=”NumericFirstLast” />

<FooterStyle BackColor=”#CCCC99″ />

<RowStyle BackColor=”#F7F7DE” /> <Columns><asp:TemplateField ShowHeader=”true”>

<EditItemTemplate>

<asp:LinkButton ID=”LinkButton1″ runat=”server” CausesValidation=”True” CommandName=”Update” Text=”Update”></asp:LinkButton>

<asp:LinkButton ID=”LinkButton2″ runat=”server” CausesValidation=”False”CommandName=”Cancel” Text=”Cancel”></asp:LinkButton>

</EditItemTemplate>

<ItemTemplate>

<asp:LinkButton ID=”LinkButton1″ runat=”server” CausesValidation=”False” CommandName=”Edit” Text=”Edit”></asp:LinkButton>

<asp:LinkButton ID=”LinkButton2″ runat=”server” CausesValidation=”False” CommandName=”Delete” Text=”Delete”></asp:LinkButton>

</ItemTemplate>

<FooterTemplate>
<asp:Button ID=”cmd_nuova” runat=”server” Text=”Nuova” ValidationGroup=”nuovaCat” CommandName=”Nuova” />

</FooterTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText=”NomeCategoria” SortExpression=”NomeCategoria”>

<EditItemTemplate>

<asp:TextBox ID=”TextBox1″ runat=”server” Text=’<%# Bind(”NomeCategoria”) %>’></asp:TextBox>
</EditItemTemplate>

<ItemTemplate>

<asp:Label ID=”Label1″ runat=”server” Text=’<%# Bind(”NomeCategoria”) %>’></asp:Label>

</ItemTemplate>

<FooterTemplate><asp:TextBox id=”NuovaCategoriaText” runat=”server” ValidationGroup=”nuovaCat”></asp:TextBox>

<asp:RequiredFieldValidator ID=”ValidatoreNuovaCategoria” runat=”server” ControlToValidate=”NuovaCategoriaText” Display=”Dynamic” ForeColor=”" ErrorMessage=”*” ValidationGroup=”nuovaCat”></asp:RequiredFieldValidator>

</FooterTemplate>

<FooterStyle Wrap=”false” />

</asp:TemplateField>

</Columns>

<PagerStyle BackColor=”#F7F7DE” Font-Bold=”True” ForeColor=”#993333″ HorizontalAlign=”Right” />

<SelectedRowStyle BackColor=”#CE5D5A” Font-Bold=”True” ForeColor=”White” />

<HeaderStyle BackColor=”#6B696B” Font-Bold=”True” ForeColor=”White” />

<AlternatingRowStyle BackColor=”White” />

</asp:GridView>

La gestione dell’inserimento del nuovo record è molto semplice, si tratta solamente di catturare l’argomento dell’evento RowCommand, nell’esempio ho utilizzato la modalità connessa, ma nulla vieta di utilizzare un ObjectDataSource:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == “Nuova” && Page.IsValid)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionStringDB"].ConnectionString))
{
TextBox box = (TextBox)GridView1.FooterRow.Cells[1].FindControl(”NuovaCategoriaText”);
SqlCommand command = conn.CreateCommand();
SqlParameter param = new SqlParameter(”@value”,box.Text);
command.Parameters.Add(param);
command.CommandText = @”INSERT INTO Categorie (NomeCategoria) VALUES (@value)”;
try
{
conn.Open();
command.ExecuteNonQuery();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
GridView1.DataBind();
}
}


0 Risposte a “Un Gridview con campo inserimento nel footer”


  1. Nessun Commento