giovedì 3 febbraio 2011

Boxing And Unbox

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: