Newsgroup: it.comp.lang.visual-basic
Titolo: Queste benedette grid

Mah ......... io non capisco.
Nei componenti standard ci sono
una dbgrid       Non ha bisogno di datacontrol ma non è possibile impostare
l'altezza di ogni singola row
una datagrid    Datasource per forza con datacontrol (che non amo usare) è
possibile impostare l'altezza di ogni singola row(penso)
una flexgrid    Non ha bisogno di datacontrol è possibile impostare
l'altezza di ogni singola row ed è un casino per il resto
una flehgrid   Uguale a flexgrid
Ma perchè almeno le db/data non le hanno fatte con le stesse proprietà. Ogni
volta uno deve diventare scemo per trovare il componente di visualizzazione
dati che si avvicini di + a quello che gli serve tralasciando sempre
qualcosa o deve spendere 400 euri per una trueDBGrid (che sto scaricando per
vedere se questa può andare)
alcau

vedere se questa può andare)
Il punto è ... cosa ti serve esattamente?
Ciao!

 l'altezza di ogni singola row ed è un casino per il resto
io mi trovo abbastanza bene, non ho mai avuto grossissimi
problemi, cosa non riesci a farci?
MIk


Soldi ben spesi... non te ne pentirai sicuramente!!
Ciao, Vincenzo

 problemi, cosa non riesci a farci?
Tra tutte le grid a disposizione penso che la flex o la flexH si avvicini di
+ alle mie esigenze ed è per questo che sto provando ad usarla.
Teoricamente il tutto funziona ma ha delle piccole impoerfezioni le quali
non mi danno pace.
Spiegando un po l'uso che ne faccio posso sintetizare con:
Premetto che nelle proprietà della felxH ho:
Generale
Row=2  FixedRow=0
Col=1  Fixed col=0
Bande
ColumnHeader non marcato
0) Preparo le intestazioni delle colonne con i vari allineamenti
1) La flexH visualizza l'elenco degli articoli di una fattura
2) Esiste una funzione che in base alla lunghezza del testo contenuto nel
campo della descrizione dell'articolo wrappa la cella e mi mostra l'intero
contenuto su n righe.
3) Al mouseDown sulla flexH visualizzo una textbox che mi da la possibilità
di modificare il dato
Ora  il punto 0,1 e 2 vanno bene
Il punto 3 mi crea non pochi problemi
Di fatti non sempre mi si posiziona sulla cella su cui clicco (su 10 sbaglia
3)
ma mi va sull'ultima cella in fondo a dx scrollando in basso l'intera flexH
Altro difetto è che se nella flexH ho solo una riga e clicco su una delle
celle la text mi si posiziona sotto di una riga.
Lo stesso problema ce l'ho anche con + righe ma se scrollo fino in fondo e
ritorno alla prima e clicco la text si posiziona correttamente.
Il codillo che uso per centrare la textbox è il seguente:
  txtEdit.Left = msf1.Left + msf1.CellLeft
  txtEdit.Top = msf1.Top + msf1.CellTop
  txtEdit.Height = msf1.CellHeight
  txtEdit.Width = msf1.CellWidth
In una verifica ho constatato che il problema è dovuto al .celltop della
flexH che inizialmente è 492 mentre dopo lo scroll divente 228(valore
corretto)
Se puoi mi dai una mano ?
Grazie, alcau

 228(valore corretto)
provato a forzare un refresh ? la flexH dovrebbe avere un metodo Refresh,
prova a vedere se invocandolo dopo la formattazione ti riporta il valore
esatto della .celltop
-- 
-Gigio@Work(?)-

 esatto della .celltop
Purtroppo la situazione non cambia

 ha scritto nel messaggio
news:MmAsb.114083$e6.40...@twister2.libero.it...


 esatto della .celltop
E' incredibile !!
Allora all'apertura della form carico il recordset che nonrmalmente da 0
record, quindi vedo la flexH con le intestazioni che precedentemente imposto
a manina.
Ricerco una fattura e carico gli articoli nella flexH .... ho il sopracitato
problema di posizionamento dovuto al valore di .celltop della flexH, ma se
invece di caricare il recordset con risultato 0 record controllo prima il
valore di recordcount e se è 0 non assegno il recordset alla flexH e se è
maggiore di 0 lo assegno quando clicco su una cella della flexH è tutto OK.
Rimane il fattore estetico, di fatti alla partenza del prog mi ritrovo una
flexH che mi mostra le due celle vuote (in alto a sx come in design time)
senza le intestazioni di colonna e tutte le volte che rilascio una fattura.
Una possibile soluzione che mi sono inventato al momento potrebbe essere che
quando non ho record assegno alla flexH un Rs fittizio o altra idea setto e
imposto columHeader nelle prorietà della flex scambiandole all'occorrenza.
Tutto ancora da verificare (tanto per perdere ancora un pò di tempo) .......
già perchè il prog potrebbe essere finito ma con ste grid si perde + tempo a
farle funzionare che a fare il corpo del programma.
Certo ....... va bene tutto ma non ditemi che questo è normale !!!
Spero di di essere contraddetto ma la flexH .......... 'a me mè pare na
strunzata' (ma unica soluzione)
alcau

Recordset fittizio non risolve !!

 Rimane il fattore estetico...
' svuota la griglia
Griglia.rows = 1
Griglia.cols = 1
'formatto le intestazioni
griglia.textarray(0) = "Codice"
griglia.textarray(1) = "Descrizione"
...
Se hai il problema della celltop puoi cmq inserire una riga nella griglia,
settarne l'altezza e poi nasconderla
-- 
<Gigio2K>
--- 
www.g2kweb.it
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

Bohhhhhhhhh.
Mi sta facendo uscire pazzo.
Se setto columnHeader nelle proprietą di Band(0) va tutto bene solo che
quando scrollo mi spariscono le intestazioni di colonna, se non uso le
intestazioni di colonna non va un cazzo ma vedo le intestazioni anche quando
scrollo.
Ma come cazzo č composta ste Flex !!

"alcau" wrote:

Mi sa che la mshflexgrid ha parecchie cose che non vanno e, purtroppo, non
credo che dipendano dal tuo codice.
Per esempio: passa alla fg un recordset vuoto (ado e non adodc) e poi
passagliene subito dopo un altro non vuoto; la prima riga (record)
generalmente non č visibile, diventa impossibile fare una selezione corretta
delle celle contenute nella fg e se quando aveva impostato il rs vuoto hai
cliccato su di un'intestzione, quando gli passi il rs "pieno" quella colonna
rimane selezionata, e vattici a divertire poi per ottenere il  valore dei
campi per farci filtri "in base a selezione" o ordinamenti.
Ho perso giornate a cercare di rimediare, ma niente. Credo comunque di
essermi arreso troppo presto, se tu ci riesci a farla funzionare...
Ciao, SK

 riesci a farla funzionare...
bho, ma solo io non ho mai avuto problemi come questi ?
Alcau, in breve, cerca di spiegare quello che vuoi ottenere , io
sinceramente non ti sto capendo molto !
Scrivi quello che vuoi ottenere e vediamo di risolverlo !


 Scrivi quello che vuoi ottenere e vediamo di risolverlo !
Mi riesce difficile spiegare questo momento (ciò la balla da Flex) ma
cercherò di sintetizzare l'uso che ne vorrei fare.
Allora ....... il solito programma di fatturazione.
Le proprietà della flexH a design time (e non cambiano nel corso
dell'esecuzione del prog) sono:
row 2 - Fixed row 1
col 11 - Fixed col 0
La proprietà column header nelle bande non è selezionata
Praticamente la stessa flexH la uso sia per inserire o modificare (se sto
visualizzando una fattura archiviata) gli
articoli di una fattura.
La flexH è collegata al datasource via codice (penso sia l'unico modo e poi
non amo i DC)
Il prog parte da una situazione vuota, cioè visualizza la form con le
textbox vuote e la flexH che mostra
le intestazioni di colonna e al di sotto una riga vuota.
Da questa situazione posso creare una nuova fattura o caricarne una
archiviata
Se inizio andando a caricare una fattura archiviata l'esecuzione è perfetta,
cioè se mi posiziono sulla prima riga,
al di sotto delle intestazioni di colonna, la cella che sto puntando con il
mouse corrisponde alle coordinate che mi sovrapporranno
la testbox/combo che sia per le eventuali modifiche del campo.
Mettiamo che ora voglia inserire una nuova fattura, premo un button che mi
si azzera la flexH e mi ritrovo come
alla partenza del prog, inserisco un' articolo clicco su una qualsiasi cella
.......... et voilà la textbox/combo non mi si visualizza,
devo cliccare al di sotto della riga (praticamente sulla flexH dove non ci
sono righe) per poter vedere, in corrispondenza della
posizione del puntatore del mouse, apparire la textbox/combo con il valore
contenuto nella cella ma al di sotto della riga
che dovrebbe essere sovrapposta dalla textbox/combo.
Poi se proseguo ugualmente continuando ad inserire articoli fino ad arrivare
allo scroll e mi sposto con la barra verticale
per visualizzare dalla prima riga inserita e mi posiziono su una cella della
prima riga la textbox/combo si posiziona
correttamente sulla cella.
Provando ad inserire un solo articolo e salvando o annullando la fattura,
voglio visualizzare una fattura archiviata cliccando
su una cella qualsiasi della prima o altra riga la selezione non è corretta
......... fa riferimento sempre alla riga successiva
a quella che si seleziona.
Sò di essere stato abbastanza tedioso ma non sono riuscito a sintetizzarmi
di +.
Grazie, alcau

> bho, ma solo io non ho mai avuto problemi come questi ?
Un'altra cosa è che posso usare solo la flexH perchè è il solo controllo nel
quale si può impostare
altezze diverse per ogni riga e che non usa i DC.

 altezze diverse per ogni riga e che non usa i DC.
Senti se ho capito bene, tu hai la tua flex popolata in bounding con un
recordset e al primo giro tutto va bene, ora quando aggiungi una nuova
fattura/voce scarichi il recordset e quindi non dovresti avere nessuna
casella nela flex, come mai te ne ritrovi 1 ?


 wrote:
Non mi sono chiarissimi tutti i passaggi che fai, o meglio, non ho capito se
passi alla fhg un recordset vuoto. Ti ripeto, la fhg si ubriaca nelle
selezioni, prova, per esempio, a farti restituire il valore della cella
attiva nel momento in cui ti si verifica il problema.
La soluzione credo sarbbe quella di trovare un escamotage per far si che la
griglia sia sempre popolata.
Per l'aggiunta di record non ci sono problemi, lo faccio tranquillamente e
aggiorno e seleziono correttamente.
Fossi in te percorrerei (io ripercorrerei) questa strada.
Ciao, SK

 casella nela flex, come mai te ne ritrovi 1 ?
Perchè faccio questo controllo all'attivazione del form:
If rsFatTemp.RecordCount > 0 Then
  Set msf1.DataSource = rsFatTemp
  Call FlexSet 'Preparo le intestazioni di colonna
  msf1.Row = 1
  Call FlexSetH 'Imposto l'altezza della riga in base al contenuto
Else
  Set msf1.DataSource = Nothing
  msf1.ClearStructure
  msf1.Rows = 2
  msf1.Row = 1
  msf1.RowHeight(1) = 228
  Call FlexSet
End If

   msf1.RowHeight(1) = 228
Scusa ma qui la setti tu l'altezza quindi non dovresti avere problemi,
adesso che succede qui ? che se tu clikki sulla prima casella della flex per
l'inserimento di un nuovo articolo la casella di testo non si posiziona
correttamente vero ? A sto punto sbattitene e fai 2 sub , una per il
posizionamento con il rcs (che e' quello che hai e che ti funziona) e uno
fisso per il rcs vuoto , tanto sai che :
1) c'e' solo una riga (la crei tu)
2) e' sempre posizionata in quel punto
3) anche scrollando non ti cambia nulla perche' la riga e' fissa !
Che te ne pare come accrocchio ?
-- 
-Gigio@Work(?)-

> Che te ne pare come accrocchio ?
Era una delle idee che avevo avuto durante la scrittura di un messaggio del
NG (recordset fittizio)
ma non da i risultati sperati.
-----------------------------------
Al momento sono impegnato con un componente scaricato da vbaccelerator.
La S-Grid, alla quale non si può assegnare direttamente un datasource ma va
riempita manualmente ma offre tutte (e decisamente di +) le proprietà della
flexH.
Con poche righe di codice ho fatto tutto quello che ho cercato di far fare
alla flexH, ed altre le ho tolte perchè già implementate.
Anche la S-Grid funziona con il sistema di sovrapporre una text/combo per la
modifica dei dati.
L'unica cosa differenza è la gestione dei dati del Rs.
Al momento penso che sarà il mio sistema standard di gestione dati.
In caso di problemi, forse ritornera alla flexH.
Ti ringrazio ugualmente per il supporto e spero di poter risolvere i miei
problemi con questo ctrl.
(PS) SpecialKeta provalo anche tu dovresti risolvere :-)
Alcau

 (PS) SpecialKeta provalo anche tu dovresti risolvere :-)
Grazie mille, lo farò.
Stammi bene, SK