Descrizioni anzichè codici in DataGridView

martedì 03 novembre 2009 - 16.27

disti Profilo | Newbie

Ciao a tutti,

in VB6 utilizzavo il controllo TrueDBGrid di ComponentOne, che aveva una funzione molto interessante: per ogni colonna permetteva di specificare una tabellina di conversione tra valori presenti nel database e valori visualizzati.
Questo mi consentiva ad esempio di avere in una tabella del database un campo "DirezioneViaggio" (si parlava di autobus) di tipo tinyint che poteva contenere 0 o 1.
Nella mia griglia io specificavo per la colonna "Direzione" che 0="Andata", 1="Ritorno" e l'utente vedeva questi valori più "user friendly".

E' possibile ottenere qualcosa di analogo con DataGridView?

Ho fatto il seguente esperimento:

Tabella "sgv_viaggi" nel db con i seguenti campi (semplificata):

Descrizione (contiene la descrizione del viaggio)
Tipologia (di tipo tinyint, se contiene 0 per l'utente è un viaggio di tipo "IT", se contiene 1 è di tipo "MON" - non sto a dirvi che significa )

poi ho scritto questo codice (bs è un oggetto bindingsource, grd è una datagridview):

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

questo codice presenta una messagebox di errore (System.FormatException: Valore di DataGridViewComboBoxCell non valido.) per ogni riga recuperata dalla tabella. PERCHE' ???????

Come posso correggere il mio codice?
Esiste un modo alternativo che non faccia uso di combobox per risolvere il mio problema?

ciao, grazie a tutti!

dante Profilo | Junior Member

Ciao
Prova a creare una colonna non associata ai dati di tipo DataGridViewComboBoxColumn
Dopodichè associ un Datasource alla colonna ed i relativi DisplayMember e ValueMember

Da qui puoi gestirlo come preferisci

Ad esempio un modo veloce per fare una prova, anche se non elegante, è sicuramente quello di nascondere la colonna contenente il dato di collegamento ed utilizzarlo come riferimento per il combo.

Saluti
Dante

disti Profilo | Newbie

Ciao Dante, grazie per la tua risposta.

come vedi dal listato allegato ho già provato ad utilizzare le combobox.

Ma ho due problemi:
1) Non funziona
2) Se anche funzionasse, nella cella della tabella avrei comunque una combobox, mentre io vorrei trovare una soluzione con una cella "normale": tieni presente che la griglia è in sola lettura, quindi di fatto la descrizione che compare al posto del codice non viene modificata dall'utente.

qualcuno mi aiuta?

ciao, grazie a tutti!!

andrea.greco Profilo | Newbie

Invece del "Form .... Select ..." inserisci questa query "SELECT sgv_viaggi.Descrizione, IIf([sgv_viaggi]![Tipologia]=0,"IT","MON") AS Tipologia FROM sgv_viaggi"
Dobrebbe funzionare.

Saluti Andrea.

dante Profilo | Junior Member

quoto Andrea.
Pero' ti consiglierei di crearti una tabella e farti una vista. in questo modo se in futuro dovrai modificare i dati non dovrai agire sul codice
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5