Il concetto di boxing è molto diffuso, come per tutte le cose a volte è necessario
( scambio dati senza interface, metodi non generici ... ) a volte no.
Ho trovato un caso in cui il boxing è abbastanza comodo, e stranamente efficente.
Posto di avere una DetailsView ed essa connessa ad un objectDataSource nell'atto di
New (ItemCreated) dobbiamo popolare alcuni campi come default.
protected void dvCreateNewItem_ItemCreated(object sender, EventArgs e)
{
//
// campo Read Olny
//
dvCreateNewItem.Rows[0].Cells[1].Text ="campo scritto nella cella";
//
// boxing e unboxing in line...
//
((TextBox)(dvCreateNewItem.Rows[1].Cells[1].Controls[0])).Text ="Campo in text box";
//
// colonna template
//
TextBox txtDate = (TextBox)dvCreateNewItem.Rows[2].FindControl("txtDate");
txtDate.Text = DateTime.Now.ToShortDateString();
}
dvCreateNewItem.Rows[1].Cells[1].Controls[0] questa restituisce un oggetto
che so già essere una TextBox e che quindi posso già unboxare..
Sicuramente è molto meglio che eseguire una findControl che in questo caso non porterebbe a molto dato che il nome del campo "non c'e'" a differenza del TemplateField.
Efficente e necessario.
Nessun commento:
Posta un commento