Newsgroup: it.comp.lang.visual-basic
Titolo: DBGrid

In una frm ho una dbgrid alimentata da un controllo data.
Nella dbgrid ho alcune colonne il cui valore è -1 o 0 ma che faccio apparire
all'utente sotto forma di Si/No settando la propietà NumberFormat della
DBGrid a YesNo.
Utilizzando un controllo Combo riesco a far cambiare il valore della cella
selezionata ma il problema è che il debugger di VB5 mi ritorna l'errore
"Errore di conversione del tipo di dati" dato che io nella cella scrivo Si o
No.In pratica come faccio a convertire il Si o No in -1 e 0 ma a far vedere
nella cella Si o No?
Posto un po di codice.La routine sul doppio click non è mia ma funziona io
l'ho solo modificata un po per le mie esigenze.
SunRex
P.S. Visual Basic 5 Access97 dbgAnalisi è la DBGrid nella Combo1 la propietà
List è settata a  Si No
Private Sub dbgAnalisi_DblClick()
Dim CellLeft, CellTop
Dim intCol As Integer
intCol = dbgAnalisi.Col
'Le celle con campi Si No vanno dalla colonna 7 alla 11
Select Case intCol
Case 7 To 11
    'memorizzo su quale cella sto lavorando
    GrigliaCol = dbgAnalisi.Col
    GrigliaRow = dbgAnalisi.Row
 'imposto l'altezza della cella della dbgrid con l'altezza della combobox
    dbgAnalisi.RowHeight = Combo1.Height
 ' Legge la larghezza della cella e imposto la larghezza combobox.
    Combo1.Width = dbgAnalisi.Columns(GrigliaCol).Width
 'leggo le coordinate della cella all'interno della dbgrid
    CellLeft = dbgAnalisi.Columns(GrigliaCol).Left
    CellTop = dbgAnalisi.RowTop(GrigliaRow)
 'posiziono la combobox sulle coordinate della cella
    Combo1.Left = CellLeft + dbgAnalisi.Left
    Combo1.Top = CellTop + dbgAnalisi.Top
'rendo visibile la combobox sulla cella
    Combo1.Visible = True
End Select
End Sub
Private Sub Combo1_Click()
'Assegno alla cella il valore selezionato sulla combo
dbgAnalisi.Col = GrigliaCol
dbgAnalisi.Row = GrigliaRow
dbgAnalisi.Text = Combo1.Text
Combo1.Visible = False
End Sub
Private Sub dbgAnalisi_Click()
Combo1.Visible = False
End Sub

posso farti  io una domanda? :-)
come fai ad impostare la proprietà NumberFormat
della Dbgrid a Yes No? io la metto sul form e mi visualizza solo 2 colonne
(che poi, in fase di esecuzione diventeranno tante quante ne servono),
quindi non posso specificare il formato di ogni colonna....
tu come fai?
ti ringrazio...
cmq prova con la proprietà itemData della combo... ci memorizzi -1 per il si
e 0 per il no...
se ho capito bene il tuo problema dovrebbe andare...


Cliccando col dex sulla DBGrid vai su Propietā\Colonne
Selezioni la Column e poi sul campo NumberFormat gli selezioni YesNo
o quello che ti serve.
Ci avevo provato ma non riesco a passargli il valore.Se passo -1 o 0
direttamente funziona perfettamente.
SunRex

si, lo so che si fa cosě, ma la mia dbgrid, in fase di progettazione ha solo
2 colonne... come faccio ad impostare il formato della colonna 10 se di
colonne ce ne sono solo 2? e non posso nemmeno specificaere, in fase di
progettazione, quante colonne voglio...
boh
non ho ben capito cosa intendi per passarglio il valore (forse perchč non ho
ancora potuto sperimentare la formattazione delle colonne!)

 ha scritto nel messaggio
news:Ha_ib.37080$Zh.2...@tornado.fastwebnet.it...

Scusa ma mica ho capito quello che vuoi fare.Vuoi crearti a run time un tot
numero di colonne?
Prova in fase di progettazione ad inserire 10 colonne e poi le rendi
visibili e le formatti o meno alla bisogna.
SunRex

 SunRex
già, ci ho pensato anche io, ma ho guardato 1 per una tutte le proprietà
della dbgrid e non c'è nessuna che mi permetta di specificare il numero di
colonne! :-( te l'ho detto, in fase di progettazione, la mia dbgrid ha solo
2 colonne, che poi, a runtime, automaticamente, diventano 10 (cioè il numero
di colonne che ha la tabella del databse cui è collegata)

se invece a runtime insersco quest'istruzione
 DBGrid1.Columns(9).NumberFormat = "yes/no"
mi funziona... ma perchè in projecttime non posso farlo? dove si aumenta il
numero di colonne?!

[Paolo C.] scrisse:

ma che strano...
paolo... quando è che fai l'associazione della tabella ai dati?
al run time, giusto?
e secondo te, al design time, come fa la poveretta a conoscere la struttura
della tabella a cui si lega?
se non sbaglio, una cosa del genere la puoi ottenere con i vari
dataenvironment, ma te ne sconsiglierei l'uso, sentendo cosa ne dicono in
moltissimi post...
--
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 moltissimi post...
sono d'accordo (anche se allora dovrei chiedermi come fa il controllo data
ad esempio a sapere in design time i campi della tabella :-) ma lasciamo
perdere)
allora SunRex le impostazioni le fa a runtime? Mi è parso di capire che le
facesse a design time, perciò ho tentato di capire come facesse


Il numero di colonne č fisso a design time setto solo la proprietą
Format\Number
per i campi Booleani!
SunRex

 numero di colonne?!
a designtime, una griglia che gia' visualizza le colonne:
con la dbgrid vb5 (tab colonne delle proprieta') puoi applicare yes/no o
true/false a una colonna bool, e la griglia visualizza sě/no, vero/falso
(magari cambia secondo le localizzazioni di vb e il windows).
con la datagrid vb6 hai il tab formato, in cui decidere cosa visualizzare.
ho provato con S/N e li visualizzava.
ciao, j.

forse non ho spiegato bene il mio problema...
utilizzo la microsoft data bound grid 5.0 (sp3) e vb6
l'ho piazzata nel mio form e si presenta con 2 sole colonne.
Il numero di colonne aumenta a 10 (il numero di colonne necessarie) solo a
runtime, quando si crea la connessione alla tabella.
Come faccio a design time a impostare il formato della cella n° 10 (9 per la
verità perchè il conteggio inizia da 0) se non ho il modo di impostare a
design time il numero di colonne necessario e quindi accedere alla colonna
9??
Nel tab formato posso modificare il formato delle colonne, sì, ma solo di
quelle 2 che ci sono in design time..
Spero di essermi spiegto meglio.
grazie comunque!

 accedere alla colonna 9??
Non puoi!!! Devi farlo in runtime, quando la colonna c'è.

 forse non ho spiegato bene il mio problema...
l'avevo capito, e l'esempio l'ho fatto proprio con vb6, con la griglia sua e
con quella di vb5.
prova a usare un escamotage. crea una tabella strutturata come quella che
dovrai gestire, linka la griglia a quella, formattala, poi a runtime linkala
al rs giusto.
hth, j.


ah! finalmente chiaro e conciso...
non č che io volessi per forza... ma finora questo post č stato leggermente
ambiguo! :-)
grazie

 ah! finalmente chiaro e conciso...
Veramente CSSoft te l'aveva già detto...
Non conosco quel controllo, ma normalmente una griglia sul form è puramente
rappresentativa. La sua vera struttura sarà quella che consegue
dall'associazione del recordset desiderato, normalmente a runtime. Se però
questo viene associato a design time, la griglia si adegua? Mica che sia
obbligatorio, ma se lo fa allora avrai le tue esatte colonne.