Accedere ai campi di un datasource bindato al FormView

Il titolo può quanto meno sembrare criptico, tuttavia, meglio di così non sono riuscito a condensarlo. Avevo un “problema” apparentemente semplice, quello di dover per l’appunto accedere ad una specifica colonna elaborata dal datasource, ma all’interno del codebehind.

Normalmente, grazie alla grande flessibilità dei nuovi oggetti ASP.Net 2.0, con poche righe di codice si riesce a modellare la pagina e mostrare i dati recuperati dal database.

Un esempio:



Avevo però la necessità di dover “catturare” uno di questi valori e assegnarlo ad un controllo che era da tutt’altra parte nella pagina, e che non doveva stare nel FormView.

Mi aspettavo quindi che agendo sull’evento OnDataBinding, il sender sarebbe stato capace di darmi accesso al DataRowView. Sulle prime non sapevo che l’oggetto che dovevo andare a cercare era quello, e forse questa ignoranza è stata frutto del tempo speso a cercare di capire.

Per accedere quindi alla collection di dati bisogna aggiungere un handler per l’evento OnDataBound come riportato nel codice sottostante.



Nel codebehind, invece, bisognerà scrivere quanto segue:

protected void FormView1_DataBound(object sender, EventArgs)
{
DataRowView r = (DataRowView) FormView1.DataItem;
String xyz = r.Row[0].ToString();
}

Ovviamente questo discorso vale se l’oggetto bindato è di tipo AccessDataSource, SqlDataSource, ecc. Se già fosse stato un ObjectDataSource, la cosa sarebbe stata decisamente differente, perchè a tornare indietro sarebbe stato un oggetto di tipo object.