Newsgroup: it.comp.lang.visual-basic
Titolo: DataGrid & Combo box

Ho un problemino con le combobox in un oggetto  datagrid... sulle msdn
nn ho trovato informazioni sul modo in cui si aggiungono i vari item.
Qualcuno sa come si puň fare? 
Grazie
Gil
--
Ho trovato un sito eccezionale: te poi scarica' la coscienza. 
S. Disegni
Clicca sul link per contattarmi direttamente da ICQ
http://msg.mirabilis.com/scripts/contact.dll?msgto=32405502

 Qualcuno sa come si può fare?
perdona, non ho capito nulla....
L'unica cosa che mi viene in mente, leggendo il tuo post, è una tecnica per
gestire i valori di look up all'interno di una griglia, ma in quel caso si
tratta di sovrapporre una normale combo box alla griglia, e quindi gli item
bisogna aggiungerli tramite il metoto add che si usa di solito....
Se hai qualche altro dettaglio...
Salutoni
Sergio

Sergio
Il fatto ke nn hai capito è indice che io nn ho capito nulla :)
Mi sa ke ho preso una toppa: nelle proprietà di un datagrid è
possibile cambiare il layout di una colonna e specificare "button".
Vedendo il pulsantino con la freccia in basso, credevo si trattasse di
una combo box, ma a quanto pare è un semplice pulsante, o sbaglio?
Perché vedo che c'è una funzione chiamata ButtonClick...
Perdona l'ignoranza, ma per valori di look up cosa intendi?
Ora ti spiego la situazione:
Ho due tabelle correlate: capi e taglie
in capi c'è un campo, id_taglia che è correlato all'omonimo campo
della tabella taglie. In taglie è presente un'altro campo che contiene
il nome della taglia, es. "XL". 
Quindi avrò
Id_taglia 1
Taglia "S"
id_taglia 2
Taglia "M"
Il mio problema è quello di creare una combo box, all'interno della
datagrid che visualizza la tabella capi, contenente la lista completa
dei nomi delle taglie. Tu dici di sovrapporre una normale combo box
alla griglia, quindi essendoci n record devo creare un'array di
combobox con n elementi?


 combobox con n elementi?
no, la combo è sempre la stessa, che posizioni di volta in volta dove ti
serve. A seconda di quello che ti serve potrebbe essere il caso di
ricaricarne gli elementi ogni volta che viene visualizzata (metti che per un
determinato capo siano presenti solo determinate taglie)
Salutoni
Sergio

determinato capo siano presenti solo determinate taglie)
Fatto! però ho preferito usare una listbox al posto di una combo, per
nn dover ricliccare sul pulsante a discesa....
Grazie mille :)


 nn dover ricliccare sul pulsante a discesa....
hai già risolto, quindi questa annotazione può risultare inutile...
Avresti anche potuto fare scendere la "linguetta" della combo da codice
(anche se non mi ricordo come si fa, se proprio tiserve vado a cercare sul
solito libro), in questo modo (utilizzando cioè comunque la combo) potresti
ottenere un risultato graficamente più gradevole
Salutoni
Sergio

ottenere un risultato graficamente più gradevole
Non ti preoccupare.. hai gia fatto abbastanza, lo cerco nella
documentazione :)
Piuttosto... ho incontrato un'altro problema, forse non gestisco la
situazione nel migliore dei modi... ci sarà un'altro sistema:
Allora, nella query usata da datagrid ho aggiunto, con una inner join,
il campo "taglia" appartente alla tabella taglie, il quale contiene il
"nome" della taglia, quindi ho:
*Id_taglia* che è una colonna di tipo numerico (non visibile quando
tutto funzionerà per il meglio)
*Taglia*, una colonna con il pulsante ke se premuto visualizza la
listbox. 
Se clicco su uno dei valori della listbox, il valore id_taglia viene
correttamente modificato. 
Ti riporto il codice del click sull'oggetto listbox:
Private Sub ListTaglia_Click()
'Cambia il valore del campo Id_taglia con l'indice della taglia appena
selezionata
GridCapi.Columns(6).Value = arrayIdTaglia(ListTaglia.ListIndex)
rsCapi.Update
ListTaglia.Visible = False
End Sub
Ora il problema è aggiornare il nome della taglia: avevo inserito,
prima dell'update ke vedi sopra, questa riga:
GridCapi.Columns(GridCapi.Col).Text = ListTaglia.Text
però poi appena tenta di updatare appare questo messaggio: 
"Le informazioni sulla colonna chiave non sono sufficienti per
effettuare l'aggiornamento".   *Credo* che cio accada perché di fatto
che in questo modo tento di modificare il valore del campo Taglia
della tabella Taglie (come datafield della colonna Taglia ho messo il
campo Taglia che ho inserito con la inner join). Allora mi sono detto:
prova a detectare il cambiamento dell'id_taglia tramite il metodo
Change della datagrid? Però a quanto pare se il valore del campo viene
cambiato da un'altra parte del codice, non viene lanciato... Heeelp!!!


 effettuare l'aggiornamento".
quando era successa a me questo errore, si era risolto caricando nel
recordset su cui si basa la tabella, i campi che costituiscono la chiave
univoca delle tabelle interessate. Prova a fare così anche tu e poi vediamo
cosa succede
Salutoni
Sergio

cosa succede
Oddio, aspetta... quindi dati questi campi:
Tabella elenco_capi:
Id_capi (chiave)
id_articolo
id_ordine
CodiceAnno (chiave)
IdTaglia
Costo_euro
N_capi
Capi_da_scaricare
Capi_caricati
Capi_da_stampare
Capi_resi
Capi_magazzino1
Capi_venduti1
Tabella Taglie (correlata alla precedente)
Id_taglia (chiave)
Taglia
dici che devo inserire la chiave univoca della tabella taglie nella
sql?
ora la mia sql è questa:
 sqlCapi = "SELECT Elenco_capi.*, Taglie.Taglia " & _
 "FROM Taglie INNER JOIN Elenco_capi ON Taglie.Id_taglia =
Elenco_capi.Id_taglia " & _
 "WHERE (((Elenco_capi.Id_articolo)=" & rsArticoli!id_articolo & ")
AND ((Elenco_capi.Id_ordine)=" & rsArticoli!id_ordine & ")) " & _
              sqlSortCapi
Cma la cosa succede anche se cerco di cancellare un record della
datagrid. Però se cancello un articolo (articoli è la tabella "padre"
di elenco capi) non si verificano errori...


               sqlSortCapi
dal "combinato disposto" di queste due informazioni, si deduce che tu,
inconsapevolmente, stai cercando di modificare il contenuto della tabella
taglie, non di quella Elenco_capi.... Fortuna che non te lo lascia fare....
Salutoni
Sergio

campo Taglia che ho inserito con la inner join).
Ma d'altra parte l'unico modo che c'è per visualizzare il nome della
taglia nella griglia è associare una colonna Taglia al campo Taglia,
no? Se ci fosse un metodo di datagrid ke sia in grado di essere
eseguito alla visualizzazione di un record, avrei lasciato la colonna
Taglie  associata a nessun campo, e l'avrei "riempita" in base
all'indice della list box. Come si gestiscono generalmente le combobox
associate ai datagrid? Se ad un indice è associato un campo testo
(come in questo caso) in che modo lo visualizzi?


 no?
no, non è l'unico modo: puoi costruire un oggetto stdFormat, associarlo alla
colonna che ti interessa (quella con l'id della taglia) e scrivere il codice
di decodifica nell'evento "Format" dell'oggetto stdFormat (da dichiarare
quindi withevents)
Salutoni
Sergio

quindi withevents)
Ho provato, così funzia tutto! anche il fatto che dava errore quando
provavo a cancellare un record, grazie, mi sei stato di grande aiuto!
:)
