in

DotNetSide

Dot Net South Italy Developers User Group

Tips

Recuperare i dati da una cella del DataGridView

 

Autore: Michele Locuratolo

Spesso si ha la necessità di recuperare i dati da una cella di una DataGrid. La regola vuole che tali elementi vengano recuperati dal DataSource e non dalla DataGridView in quanto, come spesso accade, nella gliglia potrebbero non essere mostrati tutti i dati.
Per farlo, usiamo il seguente codice:


1    private object GetCurrentBindedObject(DataGridView dgv) {
2
3 if (dgv == null || dgv.DataSource == null) {
4 return null;
5 }
6
7 BindingManagerBase bmb = dgv.BindingContext[dgv.DataSource];
8
9 if (bmb == null) {
10 return null;
11 }
12
13 return bmb.Current;
14 }

Il tipo di ritorno è un object che, in caso la sorgente dati sia una DataTable, dovrà essere castato a DataRowView.
A questo punto, per accedere al dato che ci interessa leggere, possiamo usare il seguente codice:

1    DataRowView drv = (DataRowView)GetCurrentBindedObject(dgvUsers); 
2 string strNome = drv["Nome"].ToString();


Il .NET Framework 2.0 però, ci permette di creare in modo semplice delle collection di oggetti bindabili ad elementi della UI.
Usando questa nuova caratteristica ed i comodi Generics, possiamo modificare il codice di GetCurrentBindedObject per farci ritornare direttamente il tipo che ci interessa.
Supponiamo di avere un oggetto User che rappresenta l’utente e la collection Users, che deriva da BinsingList<T> che rappresenta l’elenco dei nostri utenti (vedi codice allegato).
Il nostro codice può essere modificato come segue:


1    private T GetCurrentBindedObject(DataGridView dgv) where T: class {
2
3 if (dgv == null || dgv.DataSource == null) {
4 return null;
5 }
6
7 BindingManagerBase bmb = dgv.BindingContext[dgv.DataSource];
8
9 if (bmb == null) {
10 return null;
11 }
12
13 return bmb.Current as T;
14 }


da usare con il seguente codice:

1    User user = GetCurrentBindedObject(dgvUsers);
2 string Nome = user.Name;

 Lo stesso metodo, essendo generico, potrà essere usato per tutti gli object del nostro domain model.
Il codice completo è disponibile nel file allegato.

Only published comments... Jun 30 2006, 11:36 PM by VitoA
Filed under:
Attachment: DGTips.zip

Comments

 

Mighell's blog said:

E’ stato pubblicato un mio tip dal titolo Recuperare i dati da una cella del DataGridView. Sfruttando...
July 2, 2006 11:37 PM
Powered by Community Server (Commercial Edition), by Telligent Systems