ciao, benvenuto!
GridView e DetailsView hanno, rispettivamente, una proprietà Columns e una proprietà Fields ci ti permettono di definire con precisione quanti e quali campi visualizzare in essi. Ogni campo può assumere un proprio aspetto: può essere una checkbox, una casella a discesa o qualsiasi altra cosa tu voglia mostrare.
<asp:GridView id="griglia" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:BoundField DataField="Nome" />
<asp:TemplateField>
<EditItemTemplate>
<asp:DropDownList ID="sesso" SelectedValue='<%# Bind("Sesso") %>' OnInit="popolaSessi" runat="server" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
In questa GridView ho definito 2 campi:
- il Nome, che definisco come semplice BoundField e che perciò verrà renderizzato come una textbox in fase di editing.
- il Sesso, che invece voglio mostrare come casella a discesa. Per far questo ho bisogno di usare un TemplateField che mi permette di personalizzare il contenuto del campo. Nel suo EditItemTemplate esso metto una DropDrownList, la pongo in binding col campo e sottoscrivo il suo evento Init, affinché si possano popolare le varie scelte della casella. Ecco il codice della funzione popolaSessi da mettere nel codefile.
protected void popolaSessi(object sender, EventArgs e)
{
var casella = (DropDownList)sender;
casella.Items.Add("F");
casella.Items.Add("M");
}
Nota che sulla GridView ho messo anche l'attributo AutoGenerateColumns="false", altrimenti avrebbe generato automaticamente altre colonne, oltre a quelle che ho definito espressamente in <Columns>.
Il DetailsView funziona in maniera analoga.
Il FormView, invece, è un controllo molto più semplice che non ha automatismi per la generazione dei campi e perciò lascia a te la libertà di definire i template di visualizzazione, modifica ed inserimento. Leggi questo articolo di Daniele, troverai un esempio di codice.
http://www.aspitalia.com/script/821/Personalizzazione-Template-Controllo-FormView-ASP.NET-2.0.aspxciao