Più lo guardo e più interessante lo trovo
Adesso ci vuole questa funzione
.Columns[2].Type = Grid.combobox
:D
Ormai che ci hai lanciati.. :P
Il problema sta nel fatto che il prototipo della funzione descritta che viene richiamata quando si clicca sulla colonna prezzo dovrebbe essere questo:
PRIVATE SUB ControlloCheck(Row AS Integer, Column AS Integer)
mentre in realtà lo chiami così:
ControlloCheck(GrdBox.Row, GrdBox.Column, TRUE)
Ho evidenziato TRUE poichè tu lo inserisci come parametro ma in realtà la funzione, per come l'hai costruita, non dovrebbe riceverlo....
Ho trovato l'errore :(
Purtroppo devo fare una modifica mica da poco...
Com'era strutturato il codice fino alla penultima versione, permettevo solo la lettura di GridBox[Row,Column].Value all'esterno del componente... le ultime modifiche che ho fatto avevano appunto l'obiettivo di permettere la scrittura del valore della cella, ma evidentemente ho combinato un mezzo casino :)
Intanto, se vuoi testare la griglia, devi eliminare la sub:
PUBLIC SUB GridBox1_PosChange()
ME.TextBox1.Text = GridBox1[ME.GridBox1.Row, ME.GridBox1.Column].Value
END
contenuta nel form FTestOrdine...
Mi metto subito al lavoro: ho la fortuna di dover sviluppare questo componente anche sul posto di lavoro perché e' diventato appetibile anche per mio capo ;)
Ciao Milio
Ho provato a creare un nuovo progetto con il componente.
Ho copiato FtestOrdine e CConnection dal tuo.
Non parte e trova l'errore quà
GridBox1 = NEW GridEdit(ME.Panel1) AS "GridBox1"
forse perchè giustamente non trova la classe GridEdit...
..ho paura che mi dovrai fare un esempio con il componente attivo ;D
Inoltre volevo chiederti, per connettersi al database c'è bisogno di CConnection o si può fare anche diversamente?
Ciao Milio
Mi sono già piantato...e non capisco dove sbaglio
Ho provato a farmi una griglia(ho modificato la tua..), la visualizzazione è ok, però quando vado a modificare il database mi dice "Unknown symbol 'GridEdit1' In class 'FMain' "
Ti allego la mia prova..
Poi ho notato che funziona in maniera alternato, c'è un motivo?
.AutoNew serve per la famosa riga vuota sotto?
@Ceskho
Man mano che scrivi codice e implementi funzioni scrivi uno pseudo manuale...così chi vuole usare il tuo componente saprà cosa fare e come farlo.....puoi usare il nostro wiki così saremo ben lieti di aiutarti...
Mi studio per bene il componente e poi la guida la faccio io, magari ci scappa anche un articolo su Il resto del pinguino ;) , sò già il titolo..."Le magie di Milio" ;) ;)
Ciao Milio,
Eccomi quà con alcune cose da chiederti ;D
Intanto volevo sapere se dopo aver eliminato delle righe, e prima di salvare, dunque finchè sono rosse, è possibile fare "retromarcia", cioè deselezionare la riga.
In un esempio che stò facendo vorrei che in un textbox sia sempre visibile l'id del record. Ho fatto così:
PUBLIC SUB GridEdit1_PosChange()
ME.TextBox1.Text = GridEdit1[ME.GridEdit1.Row, 0].Value
END
Però con questo sistema sono obbligato a vedere nella griglia la colonna id. E' possibile nasconderla o si può fare in un altro sistema?
In caso che si deva copiare una riga da un altro form, come accade per esempio con inserimento dati da un listino, è giusta questa procedura teorica?
Salvo; apro il form listino e seleziono le descrizioni da copiare; con una query creo un record nuovo e inserisco le descrizioni copiate; torno nel form gridbox e ricarico.
..intanto basta :D Ciao grazie
Tranquillo non mi aspettare :D
Ho fatto quasi tutto ;D ;D
l'unica cosa che al momento non mi va è nascondere la colonna,
WITH GridEdit1.Columns[0]
.Hide = TRUE
.Type = Grid.Type.Field
.Field = "iddettaglio"
.DataType = Grid.DataType.Serial
.Text = "ID"
.w = 40
END WITH
Per il momento non ti posto niente, mi rivedo meglio il tutto e preparo per un esempio col combobox.
Ho pensato di fare l'esempio col metodo classico perchè mi sembra più intuibile per una guida, però se metti a confronto le sole 10 righe dell'altro metodo...
Ciao buona notte
WITH GridEdit1.Columns[0]
.Hide = TRUE
.Type = Grid.Type.Field
.Field = "iddettaglio"
.DataType = Grid.DataType.Serial
.Text = "ID"
.w = 40
END WITH
Da questo codice ho capito che c'e' un bug :)
prova a togliere .w = 40
he he.. più o meno ho capito :)
dove sbaglio per fare la colonna "data"?
WITH GridEdit1.Columns[10]
.Hide = FALSE
.Type = Grid.DataType.Date
.Field = "data"
.Text = "data"
' .DefaultValue = "0"
.Format = "dd-mm-yyyy"
.w = 80
END WITH
"Type mismatch: wanted Float, got string instead"
Il campo nella tabella in sqlite è di tipo "date"
Allora ho provato a collegarmi al un db mysql..e quà mi sono piantato..di brutto :(
Ho creato un db nuovo, ho collegato il db così
modulo Conn
PUBLIC $CCon AS NEW Connection
PUBLIC SUB connmydb()
WITH $CCon
.Type = "mysql"
.Host = "localhost"
.Login = "root"
.Port = "3306"
.Name = "prova"
.Password = "miapassw"
END WITH
END
nel form
PUBLIC SUB _new()
Conn.connmydb()
WITH GridEdit1
.Expand = TRUE
.Connection = Conn.$CCon
.AutoDataType = TRUE
.FieldKey = ["iddettaglio"]
.Columns.Count = 6
.TableName = "dettagli"
.LoadData("select * from dettagli ORDER BY iddettaglio")
END WITH
WITH GridEdit1.Columns[0]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "iddettaglio"
.DataType = Grid.DataType.Serial
.Text = "ID"
.w = 40
END WITH
WITH GridEdit1.Columns[1]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "codice"
.Text = "Codice"
.DefaultValue = "cod20"
.w = 80
END WITH
WITH GridEdit1.Columns[2]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "descrizione"
.Text = "Descrizione"
.w = 300
END WITH
WITH GridEdit1.Columns[3]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "quantita"
.Text = "quantita"
.Alignment = 2
.w = 80
END WITH
WITH GridEdit1.Columns[4]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "prezzo"
.Text = "Prezzo"
.DefaultValue = "0"
.Format = "$,0.00"
.Alignment = 2
.w = 80
END WITH
WITH GridEdit1.Columns[5]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "numeratore"
.Text = "riga"
.w = 40
END WITH
WITH GridEdit1
.FieldReordering = "numeratore" ' campo numerico di riordine = float o decimal
.UpdateReording = TRUE ' false non riordina e mette es. 10.5 , true riordina il campo FieldReordering
.AlwaysEditable = TRUE ' sempre editabile
.KeyActivity = TRUE ' attiva funzione key
.ReadOnly = FALSE ' solo lettura
.AutoNew = TRUE '
END WITH
END
Il collegamento funziona , ho provato a fare:
PUBLIC SUB ToggleButton1_Click()
DIM sql AS String
sql = "insert into dettagli (codice, descrizione, prezzo, numeratore ) values ('29', 'gigi', '0', '1')"
conn.$CCon.EXEC(sql)
END
e mi inserisce il primo record. Se apro il form la grid me lo visualizza e anche mi permette di scrivere altre righe, però non salvare o aggiornare il primo record. L'errore è del tipo "query failed..."
Devo staccare un pò e riguardarmi il tutto a freddo ;D adesso sono in tilt
Out of bouds
ti faccio vedere tutto il codice che forse sbaglio da qualche parte
[color=blue][font=Verdana]PUBLIC SUB _new()
Conn.connmydb()
WITH GridEdit1
.Expand = TRUE
.Connection = Conn.$CCon
.AutoDataType = TRUE
.FieldKey = ["iddettaglio"]
.Columns.Count = 10
.TableName = "dettagli"
.LoadData("select * from dettagli ORDER BY x")
' .Formatting.Count = 1
END WITH
WITH GridEdit1.Columns[0]
.Hide = TRUE
.Type = Grid.Type.Field
.Field = "iddettaglio"
.DataType = Grid.DataType.Serial
.Text = "ID"
.w = 40
END WITH
WITH GridEdit1.Columns[1]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "x"
.Text = "riga"
.w = 40
END WITH
WITH GridEdit1.Columns[2]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "codice"
.Text = "Codice"
.DefaultValue = "cod20"
.w = 80
END WITH
WITH GridEdit1.Columns[3]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "descrizione"
.Text = "Descrizione"
.w = 300
END WITH
WITH GridEdit1.Columns[4]
.Hide = FALSE
.Type = Grid.Type.Field
' .DataType = ComboBox
.Field = "colore"
.Text = "Colore"
.Box.ListCombo.Add(1, "gigi")
.Alignment = 3
.w = 80
END WITH
WITH GridEdit1.Columns[5]
.Hide = FALSE
.Type = Grid.Type.Field
.DataType = Grid.DataType.Boolean
.Field = "unit"
.Text = "Check"
.Box.ValueCheck = 1
.Box.ValueUncheck = 0
.DefaultValue = "0"
.w = 40
END WITH
WITH GridEdit1.Columns[6]
.Hide = FALSE
.Type = Grid.Type.Field
.Field = "prezzounit"
.Text = "Prezzo"
.DefaultValue = "0"
.Format = "$,0.00"
.Alignment = 2
.w = 80
END WITH
WITH GridEdit1.Columns[7]
.Hide = FALSE
.Type = Grid.Type.Formula
.Text = "Prezzo * 2"
.Formula = "=C[6]+C[6]"
.Format = "$,0.00"
.Alignment = 2
.w = 80
END WITH
WITH GridEdit1.Columns[8]
.Hide = FALSE
.Type = Grid.Type.Formula
.Text = "se 0"
.Formula = "=SE(C[5]=0;C[7];0)"
.ReadOnly = TRUE
.Format = "$,0.00"
.Alignment = 2
.w = 80
END WITH
WITH GridEdit1.Columns[9]
.Hide = FALSE
.Type = Grid.Type.Formula
.Text = "se -1"
.Formula = "=SE(C[5]=0;0;C[7])"
.ReadOnly = TRUE
.Format = "$,0.00"
.Alignment = 2
.w = 80
END WITH
WITH ME.GridEdit1.Columns[9].Formatting[0]
.Comparison = "=C[5] = 0"
.Formatting.BackColor = &HFF0000&
.Formatting.ForeColor = &HFFFFFF&
.Formatting.Text = "CARO"
.Formatting.Alignement = Align.Center
END WITH
WITH GridEdit1
' .SetHidden([0, 1])
.FieldReordering = "x" ' campo numerico di riordine = float o decimal
.UpdateReording = TRUE ' false non riordina e mette es. 10.5 , true riordina il campo FieldReordering
.AlwaysEditable = TRUE ' sempre editabile
.KeyActivity = TRUE ' attiva funzione key
.ReadOnly = FALSE ' solo lettura
.AutoNew = TRUE '
END WITH
END[/font][/color]
L'unica cosa e' che non ti ritroverai la gridbox nella toolbox :(
Dovrai istanziarti la grid da codice...
Public GridBox1 As GridBox
Public Sub _new()
GridBox1 = New GridBox(Me.Panel1)
End
Grazie milio, funziona.
Ho notato che oltre al problema del check non fà il suo dovere neanche questo:
.Columns["codice"].DefaultValue = "20"
neanche così
.Columns[2].DefaultValue = "20"
Ho aggiunto la Proprietà GridBox.Columns[].Name
Serve a identificare nelle formule la colonna indipendentemente dalla sua posizione
Mi sono rotto le p...e di riscrivere formule solo perche' mi ero dimenticato di aggiungere una colonna :)
es.
With Me.GridBox1.Columns[5]
.Name = "prz"
.Format = "$,0.00"
.Type = Grid.Type.Field
.Field = "prezzo"
End With
With Me.GridBox1.Columns[6]
.Type = Grid.Type.Formula
.Format = "#,0"
.Formula = "=C[prz] / 1.2"
End With
Visto e stò sniffando provando il tutto ;D
Ho provato a fare una colonna combobox..dove sbaglio?
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.ComboBox
.Box.ListCombo = .ReturnCollection("SELECT id, descrizione FROM colori ORDER BY descrizione;")
.Field = "colore"
.Text = "Colore"
.Alignment = 3
.w = 80
End With
e per i comandi è forse cambiata la sintassi?
Public Sub btnuovo_Click()
Me.GridBox1.NewRecord()
End
Allora....
dove hai scritto:
.Box.ListCombo = .ReturnCollection("SELECT id, descrizione FROM colori ORDER BY descrizione;")
il metodo ReturnCollection() è di proprietà dell'oggetto GridBox.
Quindi va scritto:
.Box.ListCombo = GridBox1.ReturnCollection("SELECT id, descrizione FROM colori ORDER BY descrizione;")
Sinceramente non mi ricordavo neanche di aver scritto quel metodo :)
Per quanto riguarda
Public Sub btnuovo_Click()
Me.GridBox1.NewRecord()
End
controlla nelle proprietà del progetto che sia abilitato, nelle opzioni, 'i controlli del form sono "public"'
Il tutto comunque mi ha portato a vedere una serie di errori che per adesso ho tacconato con un bel Try... domani in ufficio devo scoprire la natura di questi errori che presumibilmente sono dati dalle funzioni di controlle delle formule e della formattazione condizionata...
Ciao
Non avevo letto bene :-[
Però non riesco a farlo andare neanche nella proprietà di Gridbox1.. :'(
scrivo così:
With GridBox1
.Expand = True
.Connection = $CCon
.AutoDataType = True
.FieldKey = ["iddettaglio"]
.TableName = "dettagli"
.LoadData("select * from dettagli ORDER BY x")
.box.ListCombo = GridBox1.ReturnCollection("SELECT id, descrizione FROM colori ORDER BY descrizione;")
.FieldReordering = "x" ' campo numerico di riordine = float o decimal
.UpdateReording = True ' false non riordina e mette es. 10.5 , true riordina il campo FieldReordering
.AlwaysEditable = True ' sempre editabile
.KeyActivity = True ' attiva funzione key
.ReadOnly = False ' solo lettura
.AutoNew = True '
End With
Eccomi quà, alcune domande ;D
Combobox:
.Columns["colore"].box.ListCombo = GridBox1.ReturnCollection("SELECT id, descrizione FROM colori ORDER BY descrizione;")
nel caso si volesse solo inserire il testo e non l'ID (esempio solo descrizione) è possibile farlo? Ho provato cambiando il campo colore in varchar e scrivendo la query SELECT descrizione FROM colori ORDER BY descrizione;
ma non funziona.
Inoltre è possibile popolare la combo con dati non provenienti da database? tipo ("pippo","pluto","paperino").
Mi sono accorto che modificando i dati, la riga non si colora sempre di giallo, a volte solo la cella modificata diventa blu. Però funziona tutto bene.
Se fai prove nell'esempio che ci siamo scambiato, correggi la proprietà default della colonna Check perchè avevo sbagliato a scriverla:
Da così
A così
;D
Ciao grazie
Di nuovo "Null Object" su MySQL...
Se provo ad eliminare uno o più record, con il comando
griglia.DeleteRecord(griglia.Row)
mi evidenzia le righe di rosa... ma poi quando lancio l'Update() mi restituisce l'errore "Null Object".
Trovato... ;D
La classe Components ti restituisce tutti i componenti caricati dall'applicazione, quindi:
Private GtkComponent As Boolean
Public Sub _new()
Dim C As Component
For Each C In Components
If C.Name = "gb.gtk" Then GtkComponent = True
Next
End
Cosi' se mi trova caricato il componente 'gb.gtk' setto la variabile GtkComponent a True, che mi servirà nelle varie parti di codice per settare la gridBox
Anzi faccio gia' che spiegarti come funziona
Innanzi tutto nella colonna dove vuoi fare n formattazioni condizionate dichiari:
GridBox.Columns[Colonna].Formatting.Count = n
Poi setti le varie formattazioni in questo modo:
With GridBox.Columns[Colonna].Formatting[0]
.Comparison = "=C[Colonna] > 0"
.Formatting.Alignement = Align.Center
.Formatting.BackGround = Color.Yellow
....
End With
Ovviamente non devi settare tutte le proprietà, ma solo quelle che ti servono ;)
Capito...
griglia.Columns[5].Formatting.Count = 2 '--> vuol dire... crea 2 condizioni ([0] e [1]) per i campi della colonna[5]
With griglia.Columns[5]
.Hide = False
.ReadOnly = True
.Type = Grid.Type.Field
.Field = "palline"
.Text = "palline"
.Name = "palline"
.Formatting[0].Comparison = "=c[5]>4 and c[5]<9" '--> condizione[0] = "uguale a: valori della colonna[5] compreso tra 4 e 9"
.Formatting[0].Formatting.background = Color.Red '--> colora di rosso tutti i valori tra 4 e 9, cioè se è verificata la condizione[0]
.Formatting[1].Comparison = "=c[5]>11" '--> condizione[1] = "tutti i valori della colonna[5] maggiori di 11"
.Formatting[1].Formatting.Font = Font["bold, 14"] '--> cambia il font in bold, da 14... se è verificata la condizione[1]
.Formatting[1].Formatting.Foreground = Color.Blue '--> colora di blue tutti i valori maggiori di 11, cioè se è verificata la condizione[1]
End With
Ho capito che una o più colonne della GridBox possono anche essere virtuali, ossia inventate da una formula!
Ad esempio, potrei creare una colonna in più (che non fa parte del record) per fare dei calcoli da visualizzare, tipo gli sconti. In questo modo potrei ad esempio decidere se il prezzo calcolato in base allo sconto è superiore ad una certa cifra ed evidenziarlo... Oppure posso evidenziare, come dicevo prima, i campi di una colonna che superino un certo range.
:ok:
Nuova release dove ho 'aggiustato' la colonna di tipo Date. Non c'e' bisogno di dichiarare se Date, Time o DateTime in quanto lo riconosce direttamente dalla proprietà Columns[].Format.
Ovviamente e' comunque da testare... fatemi sapere....
premessa, sto testando e potrei sbagliarmi:
1. allineamento delle intestazioni: è previsto? Mi allineano tutte a sinistra
2. campo booleano (con checkbox), quando visualizzo campi di questo tipo con sqlite mi compaiono tutti true e invece c'è qualche false
3. Visualizzazione dei numeri di riga a sinistra: possibile disattivarla?
4. formattazione cella in base al suo valore, non riesco a settarla (es. valore 'Ottima' dovrebbe dare un background verde, 'Da evitare' invece un background rosso)
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.String
.Field = "SCELTA"
.Text = "SCELTA"
.Name = "scelta"
.Required = True
.w = 100
.Formatting.Count = 2
.Formatting[0].Comparison = "C(scelta)='Ottima'"
.Formatting[0].Formatting.Background = Color.Green
.Formatting[0].Formatting.Foreground = Color.White
.Formatting[1].Comparison = "C(scelta)='Da evitare'"
.Formatting[1].Formatting.Background = Color.Red
.Formatting[1].Formatting.Foreground = Color.White
.Formatting[0].Formatting.Font.Bold = True
.Formatting[1].Formatting.Font.Bold = True
End With
ti segnalo tutto quello che trovo
Ti posto il codice della form degli alimenti... dove esiste in alto il fitro sugli alimenti, in base alla tipo di alimento, al gruppo, alla valutazione. In pratica il filtro genera la stringa sql che viene data in pasto al comando GridBox1.LoadData(StringaDiRicerca)
formattazione condizionale, questo codice non mi funziona, errore sicuramente mio:
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.String
.Field = "SCELTA"
.Text = "SCELTA"
.Name = "scelta"
.Required = True
.w = 100
.Formatting.Count = 1
.Formatting[0].Comparison = "=C(scelta)='Ottima'"
.Formatting[0].Formatting.Background = Color.Green
.Formatting[0].Formatting.Foreground = Color.White
.Formatting[0].Formatting.Font.Bold = True
End With
La visualizzazione va bene ma quando do' il comando salva mi da' errore
Finalmente grazie ad una chiavetta della 3 riesco a postarvi una nuova release che corregge l'errore quando la GridBox e' vuota e adesso la formattazione accetta valori String.
sia lodata la chiavetta :-*
grazie di cuore, io sto continuando a sviluppare e prossimamente faro' il punto in modo da poterti aiutare. Per quanto riguarda la formattazione condizionale ora funge anche con le stringhe, unica cosa dovresto controllare perche il font bold viene messo (con 3 condizioni) solo sulla prima condizione, allego png e codice:
.Formatting.Count = 3
.Formatting[0].Comparison = "=C(scelta)='Ottima'"
.Formatting[0].Formatting.Background = Color.Green
.Formatting[0].Formatting.Foreground = Color.White
.Formatting[0].Formatting.Font.Bold = True
.Formatting[1].Comparison = "=C(scelta)='Da evitare'"
.Formatting[1].Formatting.Background = Color.red
.Formatting[1].Formatting.Foreground = Color.White
.Formatting[1].Formatting.Font.Bold = True
.Formatting[2].Comparison = "=C(scelta)='Discreta'"
.Formatting[2].Formatting.Background = Color.DarkGreen
.Formatting[2].Formatting.Foreground = Color.White
.Formatting[2].Formatting.Font.Bold = True
mmm sta cosa non e' implementata anche perche' l'inserimento automatico di valori, come ad esempio, il prezzo per un articolo, viene gestito direttamente con i vari eventi della griglia (quali Save o nel caso di una Searchbox SearchFound) lasciando l'onere di ricercare eventuali dati all'utilizzatore del componente... e' comunque una proposta interessante e si potrebbe vedere di implementarla... bisogna sapere solo bene come rappresentare il tutto in modo semplice e funzionale.
Searchfound:
Public Sub GridBox1_SearchFound(Row As Integer, Column As Integer, {Key} As String)
Dim Rec As Result
Rec = $CCon.Exec("SELECT * FROM tbEsercizi WHERE SPORT = '" & Key & "';")
Me.GridBox1[Row, "sport"].Value = Key
Me.GridBox1[Row, "cal_std"].Value = Rec["CAL"]
Me.GridBox1[Row, "cal_eff"].Value = ((Rec["CAL"] * Me.GridBox1[Row, "tempo"].Value) / 60) * Settings["daily/peso"]
End
questo codice funziona, ma con la stringa del campo SPORT, se volessi lavorare sull'ID della tabella la ricerca funziona?
c'è un limite al numero delle colonne? non riesco a fare una grid di nove colonne, non mi visualizza INFO2, questo il codice:
'griglia nutrizione
With GridBox2
.Connection = $CCon
End With
With GridBox2.Columns[Col_b]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.Date
.Field = "GMA"
.Text = "GMA"
.Name = "gma2"
.DefaultValue = Date(Now)
.Required = True
.w = 100
.Alignment = 3
End With
Inc Col_b
With GridBox2.Columns[Col_b]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.float
.Field = "GRAMMI"
.Text = "GRAMMI"
.Name = "grammi"
.Required = True
.Format = "0.00"
.w = 100
.Alignment = 3
End With
Inc Col_b
With GridBox2.Columns[Col_b]
.Hide = False
.Type = Grid.Type.Field
'.DataType = Grid.DataType.String
.Field = "ALIMENTO"
.Text = "ALIMENTO"
.Name = "alimento"
.EnabledSearch = True
.Box.ListSearch = GridBox1.ReturnCollection("SELECT ALIMENTO,ALIMENTO FROM tbAlimenti ORDER BY ALIMENTO;")
.Required = True
.w = 250
End With
Inc Col_b
With GridBox2.Columns[Col_b]
.Hide = True
.Type = Grid.Type.Field
.Field = "IDPASTO"
.DataType = Grid.DataType.Serial
.Text = "id2"
.IsFieldKey = True
' .w = 10
End With
Inc Col_b
With GridBox2.Columns[Col_b]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.float
.Field = "P"
.Text = "PROT (mnbl)"
.Name = "proteine"
.Required = True
.w = 100
.Format = "0.00"
.Alignment = 3
End With
Inc Col_b
With GridBox2.Columns[Col_b]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.float
.Field = "G"
.Text = "GRA (mnbl)"
.Name = "grassi"
.Required = True
.w = 100
.Format = "0.00"
.Alignment = 3
End With
Inc Col_b
With GridBox2.Columns[Col_b]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.float
.Field = "C"
.Text = "CARB (mnbl)"
.Name = "carboidrati"
.Required = True
.w = 100
.Format = "0.00"
.Alignment = 3
End With
Inc Col_b
With GridBox2.Columns[Col_b]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.float
.Field = "CALORIE"
.Text = "CALORIE"
.Name = "calorie"
.Required = True
.w = 100
.Format = "0.00"
.Alignment = 3
End With
Inc Col_b
With GridBox2.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.Field = "INFO"
.Text = "INFO"
.Name = "info2"
.w = 100
.Alignment = 1
End With
Inc Col_b
With GridBox2.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.Alignment = Align.Center
.DataType = Grid.DataType.Boolean
.Field = "POST"
.Text = "POST"
.Box.ValueCheck = 1
.Box.ValueUncheck = 0
.DefaultValue = 0
.w = 100
.Name = "post2"
.Alignment = 3
End With
With GridBox2
.Expand = True
.Color.RowAlternating = Color.RGB(230, 230, 230)
.AutoDataType = True
.GridOnly = True
.TableName = "tbPasti"
.LoadData("SELECT * FROM tbPasti ORDER BY GMA;")
.ColorRowAlternating = True
.AlwaysEditable = True ' sempre editabile
.ReadOnly = False ' solo lettura
.AutoNew = True '
End With
End
'calcolo griglia nutrizione
'es -----wuestel di pollo---- 55 gr.----- 1 prot--- 3.5 g ---0.5 c---
Public Sub GridBox2_SearchFound(Row As Integer, Column As Integer, {Key} As String)
Dim Rec As Result
Rec = $CCon.Exec("SELECT * FROM tbAlimenti WHERE ALIMENTO = '" & Key & "';")
Me.GridBox2[Row, "alimento"].Value = Key
Me.GridBox2[Row, "proteine"].Value = (Me.GridBox2[Row, "grammi"].Value * Rec["P"]) / Rec["GRAMMI"]
Me.GridBox2[Row, "grassi"].Value = (Me.GridBox2[Row, "grammi"].Value * Rec["G"]) / Rec["GRAMMI"]
Me.GridBox2[Row, "carboidrati"].Value = (Me.GridBox2[Row, "grammi"].Value * Rec["C"]) / Rec["GRAMMI"]
Me.GridBox2[Row, "calorie"].Value = (Me.GridBox2[Row, "proteine"].Value * 30) + (Me.GridBox2[Row, "grassi"].Value * 30) + (Me.GridBox2[Row, "carboidrati"].Value * 40)
End
allego struttura tabella sqlite
dimmi quale è la tua birra preferita ti mando una cassetta e ce la beviamo assieme..vengo su :2birre:
per quanto riguarda il problema non ti ho spiegato tutto...il reload della griglia e della tabella principale non da' problemi , quello che serve a me (dopo l'aggiornamento delle tabelle anagrafiche) è il reload dei dati che servono per i listbox, dovrei aver risolto con un comando del tipo:
GridBox2.LoadData("Select * From tbPasti ORDER BY GMA;")
Gridbox2.Box.ListSearch = GridBox2.ReturnCollection("SELECT ALIMENTO,ALIMENTO FROM tbAlimenti ORDER BY ALIMENTO;")
funge :2birre: :2birre: :2birre: :2birre: :2birre: :2birre:
Eccomi quà a fare le prime domande (chiedo scusa per eventuali banalità), sto cercando di capire le funzionalità di GridBox:
1) Richiamando i dati da una tabella MySql la GridBox non mi visualizza il primo record (la riga è vuota, vedi screenshot N.1), però se clicco sulla seconda colonna (Ragione Sociale) la riga si popola.
2) Si può forzare la visualizzazione dei dati di una colonna tutti in maiuscolo? (Per esempio la seconda colonna dello screenshot N.1)
3) Ho provato a settare la colonna in grassetto, ma il grassetto viene evidenziato solo se ci clicco sopra vedi screenshot N.2
4) Che differenza c'è tra le proprità Name e Text?
Questo il codice che sto utilizzando per queste prove:
' Gambas class file
Public $myCon As New Connection
Public Sub _new()
Me.Center()
End
Public Sub Form_Open()
Dim cSQL As String
With $myCon
.Type = "mysql"
.Host = "localhost"
.Name = "my_db"
.Login = "my_login"
.Password = "my_password"
End With
cSQL = "SELECT cdcli, rascl, indcl, cap, comune, provincia"
cSQL = cSQL & " FROM anacli, comuni"
cSQL = cSQL & " WHERE anacli.id_com = comuni.id_com"
With GridBox1
.Header = 1
.Expand = True
.Connection = $myCon
.AutoDataType = True
.Columns.Count = 2
.TableName = "anacli"
.LoadData(cSQL)
.ColorRowAlternating = False
End With
With GridBox1.Columns[0]
.Hide = False
.Type = Grid.Type.Field
.IsFieldKey = True
.Field = "cdcli"
.DataType = Grid.DataType.Serial
.Text = "Codice"
.w = 80
.Format = "000000"
End With
With GridBox1.Columns[1]
.Hide = False
.Type = Grid.Type.Field
.Field = "rascl"
.DataType = Grid.DataType.String
.Text = "Ragione Sociale"
.w = 200
.Formatting.Count = 2
.Formatting[1].Formatting.Font.Bold = True
End With
End
Public Sub BtnClose_Click()
Me.Close()
End
Grazie
@Tornu
Mi sembra che il tuo codice derivi dal wiki o da una versione vecchia di gridbox,
Ti consiglio di scaricare l'ultima versione che trovi in questo 3d esattamente questa http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1007.0;attach=1623 (http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1007.0;attach=1623)
Apri e avvi il progetto gridbox nella maschera principale oltre al tool che trovi sotto, per copiare gridbox nel tuo progetto, in alto a dx ci sono degli esempi con il database.
Puoi copiare il codice direttamente da li, vedi immagine. La stesura del codice è più corretta e facile da capire, purtroppo/per fortuna Gridbox si è evoluto in fretta e con le guide e difficile strgli dietro.
La differenza principale dal tuo codice la vedi quì, tu hai dichiarato le colonne così With GridBox1.Columns[0]
mentre adesso facciamo così:
Inc Col
With GridBox1.Columns[Col]
molto più facile, anche se devi spostarle, inoltre ricorda che il nome delle colonne viene salvato con .name in modo da poter fare operazioni tra loro esempio colonna quantità * colonna prezzo.
Comunque negli esempi è un pò riassunto tutto quello che può fare gridbox
Ciao Tornu
Ho provato un pò a guardare il tuo codice, mi sembra di capire (se non sbaglio) che non ti è chiaro l'uso di .formatting
Guardati bene l'esempio "Campo Searchbox".
Da quello che ho capito vuoi settare una colonna in grassetto, per questo basta
.Font = Font["Bold,+2"]
Non credo che sia stato implementato un'opzione per visualizzare tutto in maiuscolo, spero che milio mi smentisca ;D
Ho provato a riscrivere il tuo codice, scusami ma col sistema mio mi capisco di più ;D
Prova a vedere se và
' Gambas class file
Public $myCon As New Connection
Public Sub _new()
Me.Center()
End
Public Sub Form_Open()
Dim cSQL As String
Dim Col As Integer
With $myCon
.Type = "mysql"
.Host = "localhost"
.Name = "my_db"
.Login = "my_login"
.Password = "my_password"
End With
cSQL = "SELECT cdcli, rascl, indcl, cap, comune, provincia"
cSQL = cSQL & " FROM anacli, comuni"
cSQL = cSQL & " WHERE anacli.id_com = comuni.id_com"
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.Field = "cdcli"
.DataType = Grid.DataType.Serial
.Text = "Codice"
.Name = "colonna1"
.IsFieldKey = True
.w = 80
.Format = "000000"
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.Field = "descrizione"
.Text = "Ragione Sociale"
.Name = "colonna2"
.Font = Font["Bold,+2"]
.w = 200
End With
With GridBox1
.Expand = True
.Color.RowAlternating = Color.RGB(230, 230, 230)
.AutoDataType = True
.GridOnly = True
.TableName = "anacli"
.LoadData(cSQL)
.ColorRowAlternating = False
.AlwaysEditable = True
.ReadOnly = False
.AutoNew = True
End With
End
Public Sub BtnClose_Click()
Me.Close()
End
Prova anche questa
Public $myCon As New Connection
Public Sub _new()
Me.Center()
End
Public Sub Form_Open()
Dim cSQL As String
Dim Col As Integer
With $myCon
.Type = "mysql"
.Host = "localhost"
.Name = "my_db"
.Login = "my_login"
.Password = "my_password"
End With
cSQL = "SELECT cdcli, rascl, indcl, cap, comune, provincia"
cSQL = cSQL & " FROM anacli, comuni"
cSQL = cSQL & " WHERE anacli.id_com = comuni.id_com"
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.Field = "cdcli"
.DataType = Grid.DataType.Serial
.Text = "Codice"
.Name = "colonna1"
.IsFieldKey = True
.w = 80
.Format = "000000"
.Formatting.Count = 1
.Formatting[0].Comparison = "=C[colonna2] = GIALLO STEFANO"
.Formatting[0].Formatting.Background = Color.Yellow
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.Field = "descrizione"
.Text = "Ragione Sociale"
.Name = "colonna2"
.Font = Font["Bold,+2"]
.w = 200
End With
With GridBox1
.Expand = True
.Color.RowAlternating = Color.RGB(230, 230, 230)
.AutoDataType = True
.GridOnly = True
.TableName = "anacli"
.LoadData(cSQL)
.ColorRowAlternating = False
.AlwaysEditable = True
.ReadOnly = False
.AutoNew = True
End With
End
Public Sub BtnClose_Click()
Me.Close()
End
@golia
che mi sai dire sul campo data, la data mi viene salvata con la struttura dd/mm/yyyy nel database sqlite ma cosi' non riesco poi ad estrarre i dati.
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.Date
.Field = "GMA"
.Text = "GMA"
.Name = "gma"
.DefaultValue = Date(Now)
.Required = True
.w = 100
.Alignment = 3
End With
come posso utilizzare la formattazione?
@Golia
Grande!!!!!!! :2birre:
funziona a meraviglia e ti ringrazio per gli esempi che hai aggiunto. Quindi se ho capito bene (guardando il codice che mi hai postato) la parte di codice
With GridBox1
.Color.RowAlternating = Color.RGB(230, 230, 230)
.AutoDataType = True
.GridOnly = True
.TableName = "anacli"
.LoadData(cSQL)
.ColorRowAlternating = True
.AlwaysEditable = True ' sempre editabile
.ReadOnly = True ' solo lettura
' .AutoNew = True '
End With
va messa sempre alla fine del codice che interessa le singole colonne.
Avati a tutta :2birre: :2birre: con nuovi test.
Per installare la nuova versione che milio a postato devo disinstallare la precedente?
@milio
quando hai un attimo mi fai sapere se la griglia si può nascondere lasciando le righe colorate alternativamente, mi sembra più
professionale (mio parere personale).
@Tornu
Quindi se ho capito bene (guardando il codice che mi hai postato) la parte di codice..
Importante che però questo
With GridBox1
.Connection = $CCon
End With
venga prima delle colonne
Vedrai che velocità creare form con gridbox!!!
Ciao :2birre: :2birre:
quesito, ho il seguente codice in gridbox:
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.ComboBox
.DataType = Grid.DataType.String
.Field = "RICETTA"
.Text = "RICETTA"
.Name = "ricetta"
.Box.ListCombo = GridBox1.ReturnCollection("Select COMBINAZIONE, COMBINAZIONE From tbRicette ORDER BY COMBINAZIONE;")
.Required = True
.w = 100
End With
mi piacerebbe che , nel momento in cui premo il bottone 'Nuovo', il campo mi prendesse automaticamente il valore corrente di un combobox, provo con la proprietà .DefaultValue ma non va
Se cambi la routine del nuovo record con questa, nell'esempio, l'effetto che voglio si realizza, ma mentre prima potevo aggiungere tutte le righe che volevo e poi immettere i dati e salvare, ora posso aggiungere solo una riga alla volta:
Public Sub gbnew_Click()
Me.GridBox1.NewRecord()
GridBox1.Columns[0].DefaultValue = comboricetta.text
Me.GridBox1.DeleteRecord(Me.GridBox1.Row)
Me.GridBox1.Refresh()
Me.GridBox1.NewRecord()
End
hai qualche consiglio?
Allora ho guardato perche' nell'evento Save, creando un nuovo record, non mi andava ad aggiornare il valore di default con l'ultimo valore impostato nel tipo colonna combo (e comunque di qualsiasi altro tipo di colonna).
Con questa release dovrebbe essere tutto a posto ;)
no, mi funziona solo con questo:
Public Sub gbnew_Click()
Me.GridBox1.NewRecord()
GridBox1.Columns[0].DefaultValue = comboricetta.text
Me.GridBox1.DeleteRecord(Me.GridBox1.Row)
Me.GridBox1.Refresh()
Me.GridBox1.NewRecord()
End
ad ogni modo funge
mmmm.....
Se provi a fare in questo modo non funziona?
Public Sub gbnew_Click()
GridBox1.Columns[0].DefaultValue = comboricetta.text
Me.GridBox1.NewRecord()
End
Errore di visualizzazione
Con dati del recordset 'filtrati (quindi numero inferiore) la sensazione visiva di dati nella colonna sbagliata non si ripete
Button
Si implementa con:
Inc Col
With GridBox1.Columns[Col]
.Type = Grid.Type.Button
.Name = "Button"
.Text = "test"
.W = Me.GridBox1.Rows.H
End With
Gestione eventi con:
Public Sub GridBox1_ButtonClick(Row As Integer, Column As Integer, ColumnName As String)
......
'Me.Label1.Text = "Riga: " & Row
'Me.Label2.Text = "Colonna: " & Column
'Me.Label3.Text = "Nome: " & ColumnName
.......
End
Dopo aver inserito il nuovo codice (abilitati tutti i componenti image) compilo ma mi si blocca alla riga 54 della classe _button.class :hard: :hard: :hard:
Private Function CreatePic(Row As Integer, Column As Integer, Optional Down As Boolean) As Picture
Dim Pic As Image
If $GridBox.Row = -1 Then Return
Pic = New Image($GridBox[Row, Column].W - 2, $GridBox[Row, Column].H - 2)
Paint.Begin(Pic) ===> si blocca qua
help me please
Probabile un consumo eccessivo di memoria, dato l'elevato numero di oggetti gestiti dalla GridBox?
Che dimensioni hai di ram e cpu ? (solo per fare una valutazione generica sul problema e le cause...)
Le caratteristiche del portatile le vedi nella mia 'firma', comunque bypasso il problema sia del problema 'visivo' che del bottone.
Per il primo ho creato un sofisticato filtro dei records, memorizzabile, per il secondo ho eliminato il bottone e richiamo una scheda utilizzando un metodo che in passato hai suggerito te, richiamato da un semplice evento click:
Dim FCO As FContatto
Dim ret As Integer
Dim $_Param As New Integer[]
$_Param.add(GridBox1.CurrentCell.Value)
FCO = New FContatto($_Param)
ret = FCO.ShowModal()
nuova segnalazione per Milio premetto che sto usando la versione senza implementazione del bottone nella grid (se non erro la 2.99.134). Ho i seguenti campi data:
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.Date
.Field = "Gma"
.Text = "Start"
.Name = "gma"
.DefaultValue = Date(Now)
.Required = True
.w = 100
.Alignment = 3
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.Date
.Field = "Gmaclose"
.Text = "End"
.Name = "gmaclose"
.w = 100
.Alignment = 3
End With
nel secondo campo (gmaclose), è ammesso una valore null, è un campo che chiude un record di to-do-list
Guarda se non metto nulla cosa compare, allego l'immagine. Non escludo miei errori nella formulazione del recordset di origine, ad ogni modo dai una guardata. Preciso anche che il valore di gmaclose lo inserisco nella cella con un controllo DateBox1 ( DateBox1.value) che restituisce un valore date completo di ore minuti e secondi. Il comando di inserimento del valore del DateBox funziona. Ma se elimino il valore inserito e salvo mi compare quello che vedi nell'immagine. Nel campo è memorizzato il dato 20:25:32
Domanda sulle formule
Ho visto che hai messo in un esempio:
.formula = "=IIf(C[esenteiva]=0,(C[qta] * C[prezzo])* ((C[iva] / 100) + 1),(C[qta] * C[prezzo]))"
E' possibile far si che se clicco un checkbox una cella assuma il valore della data di oggi?
Ho provato:
.formula = "=IIf(C[campocheck]=-1,now())"
ma non va
ancora, la prima funziona, la seconda no..avrei bisogno di non inserire nulla nella cella se l'evento non si verifica
'FUNGE
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Formula
.DataType = Grid.DataType.String
.Field = "Luogo"
.Text = "Luogo"
.Name = "luogo"
.formula = "=IIf(C[chiuso]=0,'roma','brescia')"
.w = 100
.Alignment = 3
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Formula
.DataType = Grid.DataType.Date
.Field = "Luogo"
.Text = "Luogo"
.Name = "luogo"
.formula = "=IIf(C[chiuso]=0,,date(now))"
.w = 100
.Alignment = 3
End With
@milio
Inc col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Formula
.DataType = Grid.DataType.Date
.Field = "Gmaclose"
.Text = "GMA2"
.Name = "gma2"
.Required = False
.Formula = "=IIf(C[chiuso]=0,null,date(now))"
.w = 100
.Alignment = 3
End With
Subito utilizzate le nuove proprietà!
1. errore che si verifica con il :
.Formula = "=IIf(C[chiuso]=0,C[gma],Now())"
oppure con
.Formula ="IIf(C[chiuso]=0,null,date(now))"
non mi si blocca il programma, esce solo l'alert dell'errore.
2. colonna del tipo:
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.ComboBox
.Field = "Idcontatto"
.Text = "CONTATTO"
.DataType = Grid.DataType.Integer
.Box.ListCombo = GridBox1.ReturnCollection("SELECT Idcontatto, Cognome || ' ' || Nome FROM Contatti ORDER BY Cognome,Nome;")
.Name = "idcontatto"
.Required = True
.w = 215
End With
non ho trovato un altro moddo di collegare due campi testo in quanto il codice campo1 & ' ' & campo2 non viene preso
3. ordinamento recordset collegato alla griglia: non mi prende l'ordinamento il seguente ordinamento multiplo:
With GridBox1
.Expand = True
.Color.RowAlternating = Color.RGB(230, 230, 230)
.AutoDataType = True
.GridOnly = True
.TableName = "Tasks"
.LoadData("SELECT Gma,Chiuso,Gmaclose,Id,Idcontatto,Idtask,Urgenza,Note,Richieste,Luogo FROM Tasks ORDER BY Gma,Idcontatto;")
.ColorRowAlternating = True
.AlwaysEditable = True
.EnableObjectLinked = True
.ReadOnly = False
.AutoNew = True
End With
questo si:
With GridBox1
.Expand = True
.Color.RowAlternating = Color.RGB(230, 230, 230)
.AutoDataType = True
.GridOnly = True
.TableName = "Tasks"
.LoadData("SELECT Gma,Chiuso,Gmaclose,Id,Idcontatto,Idtask,Urgenza,Note,Richieste,Luogo FROM Tasks ORDER BY Gma;")
.ColorRowAlternating = True
.AlwaysEditable = True
.EnableObjectLinked = True
.ReadOnly = False
.AutoNew = True
End With
@Andy
1: New Release: Bug-Fix ;)
2-3: Ordinamenti e concatenazione di campi e' tutto gestito da codice sql... come viene fuori il record la gridbox lo visualizza di conseguenza.
Per questo:
.Box.ListCombo = GridBox1.ReturnCollection("SELECT Idcontatto, Cognome || ' ' || Nome FROM Contatti ORDER BY Cognome,Nome;")
prova cosi':
.Box.ListCombo = GridBox1.ReturnCollection("SELECT Idcontatto, (Cognome || ' ' || Nome) AS Nominativo FROM Contatti ORDER BY Cognome,Nome;")
e nella GridBox setti una colonna con .Field = "Nominativo" in sola lettura
@Andy
1: New Release: Bug-Fix ;)
2-3: Ordinamenti e concatenazione di campi e' tutto gestito da codice sql... come viene fuori il record la gridbox lo visualizza di conseguenza.
Per questo:
.Box.ListCombo = GridBox1.ReturnCollection("SELECT Idcontatto, Cognome || ' ' || Nome FROM Contatti ORDER BY Cognome,Nome;")
prova cosi':
.Box.ListCombo = GridBox1.ReturnCollection("SELECT Idcontatto, (Cognome || ' ' || Nome) AS Nominativo FROM Contatti ORDER BY Cognome,Nome;")
e nella GridBox setti una colonna con .Field = "Nominativo" in sola lettura
la questione del 'Nominativo non la capisco:
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.ComboBox
.Field = "Idcontatto"
.Text = "CONTATTO"
.DataType = Grid.DataType.Integer
.Box.ListCombo = GridBox1.ReturnCollection("SELECT Idcontatto, Cognome || ' ' || Nome FROM Contatti ORDER BY Cognome,Nome;")
.Name = "idcontatto"
.Required = True
.w = 215
End With
se questa è la colonna, devo lavorare dentro questa no? da come scrivi sembrerebbe che devo creare un'altra colonna
Ieri ho accontentato Golia e oggi penso di accontentare Andy ;D
New Release:
GridBox.AlignementHeader
Allineamento del testo della testata di ogni colonna
Allineamento del testo della testata della singola colonna
Ovviamente da testare... :ciao:
(1)grande modifica, controlla una cosa: se il campo contenente la proprietà è seguito/precede un campo con hide=true, GridBox.Columns[].AlignementHeader potrebbe non essere effettuata, oppure potrebbe non essere effettuata dopo la settima/ottava colonna visualizzata. In speedCRM ho la seguente configurazione:
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.Date
.Field = "Gma"
.Text = "GMA"
.Name = "gma"
.DefaultValue = Now()
.Required = True
.AlignmentHeader = 3
.w = 100
.Alignment = 3
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.Alignment = Align.Center
.DataType = Grid.DataType.Boolean
.Field = "Chiuso"
.Text = "CHIUSO"
.name = "chiuso"
.Box.ValueCheck = 1
.Box.ValueUncheck = 0
.DefaultValue = 0
.w = 65
.Alignment = 3
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Formula
.DataType = Grid.DataType.Date
.Field = "Gmaclose"
.Text = "GMA2"
.Name = "gma2"
.Formula = "=IIf(C[chiuso]=0,null,Now())"
.AlignmentHeader = 3
.w = 100
.Alignment = 3
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = True
.Type = Grid.Type.Field
.Field = "Id"
.DataType = Grid.DataType.Serial
.Text = "id"
.IsFieldKey = True
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.ComboBox
.Field = "Idcontatto"
.Text = "CONTATTO"
.DataType = Grid.DataType.Integer
.Box.ListCombo = GridBox1.ReturnCollection("SELECT Idcontatto, Cognome || ' ' || Nome FROM Contatti ORDER BY Cognome,Nome;")
.Name = "idcontatto"
.Required = True
.AlignmentHeader = 3
.w = 215
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.ComboBox
.Field = "Idtask"
.Text = "TASK"
.DataType = Grid.DataType.Integer
.Box.ListCombo = GridBox1.ReturnCollection("SELECT Idtask, Task FROM Task ORDER BY Task;")
.Name = "idtask"
.AlignmentHeader = 3
.w = 170
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.ComboBox
.DataType = Grid.DataType.String
.Field = "Urgenza"
.Text = "URGENZA"
.Name = "urgenza"
.Formatting.Count = 3
.Formatting[0].Comparison = "=C(urgenza)='ALTA'"
.Formatting[0].Formatting.Background = Color.red
.Formatting[0].Formatting.Foreground = Color.White
.Formatting[0].Formatting.Font.Bold = True
.Formatting[1].Comparison = "=C(urgenza)='MEDIA'"
.Formatting[1].Formatting.Background = Color.Green
.Formatting[1].Formatting.Foreground = Color.White
.Formatting[1].Formatting.Font.Bold = True
.Formatting[2].Comparison = "=C(urgenza)='BASSA'"
.Formatting[2].Formatting.Background = Color.DarkGreen
.Formatting[2].Formatting.Foreground = Color.White
.Formatting[2].Formatting.Font.Bold = True
.Box.ListCombo.Add("ALTA", "ALTA")
.Box.ListCombo.Add("MEDIA", "MEDIA")
.Box.ListCombo.Add("BASSA", "BASSA")
.w = 100
.Required = False
.AlignmentHeader = 3
.Alignment = 3
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = True
.Type = Grid.Type.Field
.DataType = Grid.DataType.String
.ObjectLinked = Me.TextArea1
.ObjectPropertyLinked = "Text"
.Field = "Note"
.Name = "note"
'.w = 80
'.Alignment = 1
End With
Inc Col
With GridBox1.Columns[Col]
.Hide = True
.Type = Grid.Type.Field
.DataType = Grid.DataType.String
.ObjectLinked = Me.TextArea2
.ObjectPropertyLinked = "Text"
.Field = "Richieste"
.Name = "richieste"
'.w = 80
'.Alignment = 1
End With
With GridBox1
.Expand = True
.Color.RowAlternating = Color.RGB(230, 230, 230)
.AutoDataType = True
.GridOnly = True
.TableName = "Tasks"
.LoadData(Filtro)
.ColorRowAlternating = True
.AlwaysEditable = True
.EnableObjectLinked = True
.AlignmentHeader = True
.ReadOnly = False
.AutoNew = True
End With
End
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.String
.Field = "Luogo"
.Text = "LUOGO"
.Name = "luogo"
.DefaultValue = "Roma"
.w = 120
.AlignmentHeader = 3
.Alignment = 1
End With
(2) Se metto le colonne con hide true all'ultimo posto, le colonne vengono visualizzate lo stesso.
(3) .ObjectPropertyLinked = "Text", se collego un campo TextEdit (dove il testo è formattato con tag html), nel momento in cui salvo, il valore viene 'pulito' dai caratteri di formattazione.
(4) Vario un record e non salvo: dovrebbe uscire un message del tipo "Record corrente modificato ma non salvatto. " con due bottoni, 'Salvo', 'Abbandono la modifica'.
(5) Allineamento degli headers delle colonne, in speedCRM va in myZone no, ma penso che sia un mio errore, ti faccio sapere.
Grande! Richtext cosi' come mi hai suggerito funziona! Sul resto (save monitorato) devo:
a) abilitare il controllo con (esempio):
gridbox1.MonitoringSave = True
b) come faccio a gestire lo stato, dove utilizzo il valore gridbox1.WaitinInSave?
@milio..hard debug :P :-* :2birre:
1) Le routine contenute in questa sub funzionano anche su campi combo?
GridBox1_SearchFound(Row As Integer, Column As Integer, {Key} As String)
te lo chiedo perche' con questo tipo di settaggio funziona:
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
'.DataType = Grid.DataType.String
.Field = "ALIMENTO"
.Text = "ALIMENTO"
.Name = "alimento"
.EnabledSearch = True
.Box.ListSearch = GridBox1.ReturnCollection("SELECT ALIMENTO,ALIMENTO FROM tbAlimenti ORDER BY ALIMENTO;")
.Required = True
.w = 300
End With
con questo no:
Inc Col_b
With GridBox2.Columns[Col_b]
.Hide = False
.Type = Grid.Type.ComboBox
.Field = "RICETTA"
.Text = "RICETTA"
.DataType = Grid.DataType.String
.EnabledSearch = True
.Box.ListCombo = GridBox1.ReturnCollection("SELECT COMBINAZIONE,COMBINAZIONE FROM tbRicette ORDER BY COMBINAZIONE;")
.Name = "ricetta"
.Required = True
.w = 270
End With
Me ne sono accorto per caso, stavo chiudendo il programma e volevo realizzare un video di preview :rolleyes: :hard:
2) Ancora, mi sono accorto di questa cosa: se creo una grid con dei combobox e se do' ad un certo punto il comando:
Me.GridBox3.MoveTo(Me.GridBox3.Rows.Max, 0)
per posizionare il cursore sull'ultima riga, i combo non sono visualizzati, allego foto
3) E' possibile settare a livello di setup generale di una gridbox, l'altezza delle standard delle rows, potrebbe essere interessante. Ho cercato tra i metodi ma non ho trovato. E ancora, potrebbe essere interessante, a fronte di una certa altezza standard, dare un valore specifico ad una row.
4) Con i campi combo la formattazione condizionale funziona? Mi sembra nelle prove che ho fatto che il codice seguente non produca effetti se il campo è combo. La formattazione dovrebbe operare nella fase di visualizzazione ante clic del mouse sulla cella
.Formatting.Count = 3
.Formatting[0].Comparison = "=C(urgenza)='ALTA'"
.Formatting[0].Formatting.Background = Color.red
.Formatting[0].Formatting.Foreground = Color.White
Detto questo non diro' + nulla!!!! :-\ :P
ps. non escludo miei errori nel codice ..
Nuova release:
inserito evento GridBox_ComboClick()
Corretto Bug sull'allineamento del testo delle colonne
utilizzato mi sembra bene
Public Sub GridBox2_ComboClick()
Dim Rec As Result
Dim myricetta As String
If GridBox2.CurrentCell.Column = 1 Then
myricetta = GridBox2.CurrentCell.Value
Endif
Rec = $CCon.Exec("SELECT * FROM tbRicette WHERE COMBINAZIONE =&1;", myricetta)
GridBox2[Me.GridBox2.Row, "proteine"].Value = Rec["P"]
GridBox2[Me.GridBox2.Row, "grassi"].Value = Rec["G"]
GridBox2[Me.GridBox2.Row, "carboidrati"].Value = Rec["C"]
GridBox2[Me.GridBox2.Row, "calorie"].Value = Rec["CALORIE"]
End
Segnalazione etichette header: quando clicchi la colonna l'etichetta trasla vs destra e se la colonna è stretta a volte non si legge, xche' trasla perdendo la centratura?
Visualizzazione dati dopo aver cliccato 'nuovo record' e aver selezionato un valore dal combo, la riga si evidenzia di verde: a volte non si vedono i dati forniti dall'evento comboclick. Cosa che non succede sostituendo al combo un campo normale field e search abilitato.
certo che mi fa piacere vedere il test tra gli esempi!!
:2birre: :2birre:
e .... ancora ho una considerazione sui campi calcolati....so che alla fine del debugging o divento un grande amico di milio o mi odierà ma accetto il rischio!!
se si crea un campo di questo tipo:
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.Alignment = Align.Center
.DataType = Grid.DataType.Boolean
.Field = "Chiuso"
.Text = "CHIUSO"
.name = "chiuso"
.Box.ValueCheck = 1
.Box.ValueUncheck = 0
.DefaultValue = 0
.w = 65
.Alignment = 3
End With
e ancora un campo di questo tipo:
Inc Col
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
.Type = Grid.Type.Formula
.DataType = Grid.DataType.Date
.Field = "Gmaclose"
.Text = "GMA2"
.Name = "gma2"
.Formula = "=IIf(C[chiuso]=0,null,Now())"
.AlignmentHeader = 3
.w = 100
.Alignment = 3
End With
noto le cose seguenti:
- il calcolo è effettuato bene nel senso che con il checkbox attivo, il campo calcolato prende la data odierna
- pero' forse serve anche altro: l'utente in questo caso ha il 'suggerimento della data odierna', ma dovrebbe anche poter variare la data e soprattutto ritrovare la data voluta quando riapre la grid, invece compare il segno della formula #ERR
quindi chiedo se possibile le segg.modifiche: campo formula ok, ma possibilità di variazione manuale e soprattutto salvataggio
se poi mi sono sbagliato e il salvataggio mancato è colpa mia, chiaritemi... :hard: :hard:
@Andy
Scusa il ritardo, ma e' stata una giornata incasinata...
Segnalazione etichette header:
Ho fatto delle prove e mi sono accorto che e' un problema di Font...
Prova anche tu a cambiare il font alla GridBox e dimmi se l'allineamento ti risulta corretto.
Visualizzazione dati dopo aver cliccato 'nuovo record' e aver selezionato un valore dal combo
Con nuova release dovrebbe, tocchiamoci gli zebedei :), essere tutto a posto (che fatica pero')
noto le cose seguenti:
- il calcolo è effettuato bene nel senso che con il checkbox attivo, il campo calcolato prende la data odierna
- pero' forse serve anche altro: l'utente in questo caso ha il 'suggerimento della data odierna', ma dovrebbe anche poter variare la data e soprattutto ritrovare la data voluta quando riapre la grid, invece compare il segno della formula #ERR
quindi chiedo se possibile le segg.modifiche: campo formula ok, ma possibilità di variazione manuale e soprattutto salvataggio
se poi mi sono sbagliato e il salvataggio mancato è colpa mia, chiaritemi... :hard: :hard:
In questo caso penso che sia sbagliato l'utilizzo di un campo Formula.
Io farei in questo modo:
Public Sub Gridbox1_Save(Row As Integer, Column As Integer)
If Me.GridBox1.Columns[Column].Name = <TuaColonnaCheck> And Me.GridBox1[Row,Column].Value = <TuoValoreCheck> Then
Me.GridBox[Row,<TuaColonnaData>].Value = Now()
EndIf
End
In questo caso la <TuaColonnaData> e' di tipo Field e ci potrai scrivere il valore che vuoi
Ciao andy
il tuo lavoro si potrebbe mettere tra gli esempi di gridbox, come esempio per ComboClick.
Sempre che ti faccia piacere e se Milio è daccordo ;)
:2birre: :2birre: :2birre:
Certo che sono d'accordo... anche perche' il grosso del lavoro lo fate voi :)
gridbox.comboclick è cambiato gli argomenti sono questi?
Public Sub GridBox1_ComboClick(Row As Integer, Column As Integer, {Key} As String)
End
thx!!
gridbox.comboclick è cambiato gli argomenti sono questi?
Public Sub GridBox1_ComboClick(Row As Integer, Column As Integer, {Key} As String)
End
thx!!
L'evento ConboClick:
GridBox1_ComboClick(Row As Integer, Column As Integer, ColumnName As String)
quello che tu hai postato mi sembra questo:
Public Sub GridBox1_SearchFound(Row As Integer, Column As Integer, Key As String)
Sto revisionando un mio progetto in Gambas3, e dopo aver fatto alcuni test su GridBox viste le sue potenziolità la stò utilizzando all'interno dello stesso con grandi soddisfazioni.
Ora mi trovo davanti a un problema che non sono riuscito a risolvere, (sicuramente una cavolata...penso).
Mi sono riletto tutto (quasi) dall'inizio questa discussione per vedere se trovavo qualche indicazione, ma niente, anche se Golia all'inizi aveva avuto
un problema similare al mio ma non so come ha risolto visto che quella domanda non ha avuto seguito.
Praticamente in tutti gli esempi per collegare GridBox al db principalmente fatte riferimento a questo codice
With $myCon
.Type = "mysql"
.Host = "localhost"
.Name = "test_db"
.Login = "my_login"
.Password = "my_password"
End With
With GridBox1
.Connection = $myCon
End With
che funziona benissimo, però mi costringe a ripeterlo su ogni form. Io nel mio progetto ho um modulo che mi gestisce la connessione che richiamo
in qualsiasi posizione del progetto, ma non riesco a utilizzarlo con GridBox. :hard:
Mi serve un aiuto
anchi'io mi collego da un modulo
With GridBox1
.Connection = avvio.$myconn
End With
L'unica cosa che mi viene in mente è la maiuscola di "Mysql".. non saprei, mi sembra che dovrebbe andare come hai fatto.
Prova a cambiare "mysql" con "Mysql"
ma dai sono solo 7 righe di codice...
andy, mi meraviglio di te....tu che sei molto attento nell'utilizzare il codice al meglio... :nono:
Saranno solo 7 righe che moltiplicate per un bel pò di form fanno una bella cifretta, così penso sia meglio:
With GridBox1
.Connection = MGlobal.db
End With
sia a livello di "pulizia" che lettura del codice....o no
Grazie milio, sempre puntuale :2birre: (niente birra a andy ;))
Eccomi di nuovo, ormai ci ho preso gusto (milio, peggio per te.... ;D), sto cercando di implementare la ricerca di un dato all'interno di una colonna della GridBox ben precisa, prelevando la stringa da ricercare da una TextBox, ho provato con questo codice
Public Sub TxtCode_Activate()
With GridBox1.Columns[0]
.Formatting[0].Comparison = "=C[codice] = '" & TxtCode.Text & "'"
.Formatting[0].Formatting.Background = Color.Yellow
End With
End
ma mi da questo errore:
Out of bounds in_Conditionals:18
E il modo c'e :ok:, basta un po' di ragionamento...e la soluzione si trova
.Formatting.Count = 1
.Formatting[0].Comparison = "=C[NomeColonna] = ' '"
.Formatting[0].Formatting.Text = "Valore_Default"
alla prossima
@tornu
thx!! :-* :2birre: :2birre:
mi hai aiutaato a risolvere una cosa:
With GridBox1.Columns[Col]
.Hide = False
.Type = Grid.Type.Field
'.Type = Grid.Type.Formula
.DataType = Grid.DataType.Date
.Field = "Gmaclose"
.Text = "GMA2"
.Name = "gma2"
.Formatting.Count = 2
.Formatting[0].Comparison = "=C[chiuso] =1"
.Formatting[0].Formatting.Text = Format$(Date(Now), "dd/mm/yyyy")
.Formatting[1].Comparison = "=C[chiuso] =0"
.Formatting[1].Formatting.Text = " "
.AlignmentHeader = 3
.w = 100
.Alignment = 3
End With
Vorrei un riscontro da parte vostra per sapere se succede solo a me ho è un "problema" di GridBox, impostando la proprietà di una colonna
per l'allineamento centrato dell' Header:
.AlignmentHeader = Align.Center
quando clicco su un dato della colonna l'intestazione si sposta a destra, cliccando su un'altra colonna o quando perde il focus l'intestazione torna centrata ???
Sto cercando di formattare una colonna in base ad una certa condizione, ma dopo tante prove non ci sono riuscito, la colonna "Ricarico" non visualizza il risultato della formula ma la scritta #ERR, il codice che sto provando è il seguente
Inc col
With GridBox1.Columns[col] ' Colonna 6
.Hide = False
.ReadOnly = True
.Text = "Ricarico"
.Name = "ric"
.AlignmentHeader = Align.Right
.Type = Grid.Type.Formula
.DataType = Grid.DataType.Float
.Formatting.Count = 1
.Formatting[0].Comparison = "=C[percentuale]> 0"
.Formatting[0].Formatting.Formula = "=(C[pacquisto] * (100 + C[percentuale]))/100"
.Format = "0.00"
.Alignment = Align.Right
.Resizable = False
.W = 70
End With
è chiaro che ancora non ho capito bene le varie proprietà, cosa stò sbagliando?
Prova cosi'
Inc col
With GridBox1.Columns[col] ' Colonna 6
.Hide = False
.ReadOnly = True
.Text = "Ricarico"
.Name = "ric"
.AlignmentHeader = Align.Right
.Type = Grid.Type.Formula
.DataType = Grid.DataType.Float
.Formula = "=IIF(C[percentuale] > 0 , (C[pacquisto] * (100 + C[percentuale]))/100 , Null)"
.Format = "0.00"
.Alignment = Align.Right
.Resizable = False
.W = 70
End With
Ciao milio, per prima cosa grazie per la risposta.
Allora anche con la modifica al codice che mi hai postato non è cambiato nulla, ho provato a fare altre prove, questi i risultati:
provando a fare calcoli tra le colonne (utlizzando il loro nome) non funziona
.Formula = "=IIF(C[percentuale] > 0 , C[pacquisto] + C[percentuale], Null)"
non funziona neanche così
.Formula = "=IIF(C[percentuale] > 0 , C[pacquisto] + 20, Null)"
in questo modo funziona perfettamente
.Formula = "=IIF(C[percentuale] > 0 , 3 * 3, Null)"
c'è qualcosa che non va o sono io che non ho ancora capito bene
Intendi questa
With GridBox1
.Font.Name = "Arial"
.Header = 1
.Expand = False
.AutoDataType = True
.GridOnly = True
.TableName = "listino"
.LoadData(sSQL)
.ColorRowAlternating = False
.Color.RowAlternating = Color.RGB(230, 230, 230)
.Grid = False
End With
a parte il seriale, che posso sistemare facilmente, cosa suggerisci per effettuare sta cosa? seriale o non seriale il codice va inserito da qualche parte..
1) eliminazione record tabella esercizi...nel codice del bottone elimina inserisco anche una sql di eliminazione dei dati della tabella allenamenti..della serie.....delete from xxxxxx where idesercizio=xx, il refresh della tabella allenamenti lo faccio da qua con
Form1.Gridbox1.Colums[1].........refresh del combo contenenti gli esercizi
ma è giusto?
2) modifica tabella allenamenti...in effetti se lavoro sul seriale la modifica non ha motivo di essere fatta, già è fatta..rilavoro sui seriali..
@ Andy
mi ricordate come ci si posiziona sull'ultimo record(riga)? grazzzieeee
Il grande capo direbbe.....
GridBox.MoveTo(GridBox.Rows.Max,colonna)
;)
:2birre: :2birre: :2birre:
Classe SearchBox.Class
Dim sEventName As String = Object.LastEventName
dal changelog di ganbas3:
r4122 | gambas | 2011-09-13 02:02:33 +0200 (mar, 13 set 2011) | 3 lines
[INTERPRETER]
* BUG: Remove the deprecated Object.LastEventName property.
Ciao Milio,
ho scaricato il primo esempio da te postato (....ormai preistoria :)), ma anche quello è collegato ad un DB, quindi non mi è utile.
Per quanto riguarda il fatto che sia fondamentalmente una GridView è vero fino ad un certo punto...l'hai rivoluzionata un bel pò.
Ti faccio uno stupido esempio, che poi è quello che sto cercando di ottenere io con la Gridbox:
GridView1.Columns.Count = 3
GridView1[0, 0].Text = "dato1"
GridView1[1, 1].Text = "dato2"
GridView1[2, 2].Text = "dato3"
con Gridbox non ci sono riuscito, sicuramente una mia limitazione.
.........
Con il vostro aiuto sono ormai arrivato quasi ad ottenere da Gridbox quello che mi serviva, mi è rimasto un'ultimo problema:
come faccio ad inserire più righe?
.........
Mi rispondo da solo, e chiedo scusa (in modo particolare a Milio) :-[ se qualche volta posto domande "stupide", la soluzione era di una semplicità
imbarazzante
Public Sub load_data()
GridBox1.Rows.Count = 2
GridBox1.Rows.H = 50
GridBox1.ColorRowAlternating = True
GridBox1.Color.RowAlternating = Color.RGB(230, 230, 230)
GridBox1[0, "col1"].Value = "CO"
GridBox1[0, "col2"].Value = "1601659"
GridBox1[0, "col3"].Value = "13/11/2011"
GridBox1[0, "col4"].Value = "050000"
GridBox1[0, "col5"].Value = "120,55"
GridBox1[1, "col1"].Value = "CO"
GridBox1[1, "col2"].Value = "1601663"
GridBox1[1, "col3"].Value = "13/11/2011"
GridBox1[1, "col4"].Value = "010404"
GridBox1[1, "col5"].Value = "23,50"
End
:ok: Grazie
@andy
ciao andy ogni tanto....ci si vede
ho perso qualcosa... ho due campi in gridbox su cui effettuo il calcolo del totale con il codice:
Public Sub GridBox1_Total(Column As Integer, ColumnName As String)
Dim Value As String
Value = Format$(Me.GridBox1.Columns[Column].Total, Me.GridBox1.Columns[Column].Format)
If ColumnName = "campo1" Then
Me.TextBox2.Text = Value
Else If ColumnName = "campo2" Then
Me.TextBox3.Text = Value
Endif
End
se volessi sommare i due valori e visualizzarli in terzo textbox esterno al database dove piazzo il codice?
grazzzzzzzzie x la comprensione 'natalizia'!! :-*
Public Sub GridBox1_Total(Column As Integer, ColumnName As String)
Dim Value As String
Value = Format$(Me.GridBox1.Columns[Column].Total, Me.GridBox1.Columns[Column].Format)
If ColumnName = "campo1" Then
Me.TextBox2.Text = Value
me.texbox4.text = me.textbox2.text + me.textbox3.text
Else If ColumnName = "campo2" Then
Me.TextBox3.Text = Value
me.texbox4.text = me.textbox2.text + me.textbox3.text
Endif
End
Ciao Andy, non ho provato ma credo che a grandi linee dovrebbe andare così, però devi vedere per la formatazione perchè textbox è testo.
@Golia
ho risolto cosi' dichiarando:
private t1 as float
private t2 as float
e
Public Sub GridBox1_Total(Column As Integer, ColumnName As String)
Dim Value As String
Value = Format$(Me.GridBox1.Columns[Column].Total, Me.GridBox1.Columns[Column].Format)
If ColumnName = "dare" Then
Me.TextBox2.Text = Value
t1 = Me.GridBox1.Columns[Column].Total
Me.TextBox4.text = Format$(t1 - t2, Me.GridBox1.Columns[Column].Format)
Else If ColumnName = "avere" Then
Me.TextBox3.Text = Value
t2 = Me.GridBox1.Columns[Column].Total
Me.TextBox4.text = Format$(t1 - t2, Me.GridBox1.Columns[Column].Format)
Endif
End
@ milio...scusa se ti asssillo con il debugging, ammesso che non sia una mia cappellata (cosa probabile..):
da' una guardata:
Inc Col_2
With GridBox2.Columns[Col_2]
.Hide = False
.Type = Grid.Type.Field
.DataType = Grid.DataType.float
.Field = "saldo"
.Name = "saldo"
.Text = "SALDO"
.DefaultValue = 0
.Format = "00.00"
.Formatting.Count = 2
.Formatting[0].Comparison = "=C(saldo)>-1"
.Formatting[0].Formatting.Background = Color.DarkGreen
.Formatting[0].Formatting.Foreground = Color.Black
.Formatting[0].Formatting.Font.Bold = False
.Formatting[1].Comparison = "=C(saldo)<-1"
.Formatting[1].Formatting.Background = Color.red
.Formatting[1].Formatting.Foreground = Color.Black
.Formatting[1].Formatting.Font.Bold = False
.w = 80
.Alignment = 2
End With
e
With GridBox2
.Expand = True
.Color.RowAlternating = Color.RGB(230, 230, 230)
.AutoDataType = True
.GridOnly = True
.TableName = "tbConti2"
.LoadData(sqlcorrente)
.ColorRowAlternating = True
.AlwaysEditable = True ' sempre editabile
.ReadOnly = False ' solo lettura
.AlignmentHeader = 3
.AutoNew = True '
'.EnabledObjectLinked = True
End With
Possibile che dipenda dal tipo di formato di visualizzazione '00.00'?
In un altro caso ho notato come la formattazione , all'apertura della griglia, sulla prima riga non funzioni, salvo poiattivarsi premendo il tasto refresh.
Non so se dipende dal tipo di ordinamento del recordset...è una mia supposizione.
come è possibile?
gridbox debugging
1. sezione 'Visualizzatore record': quando esegui una sql il primo campo ha la larghezza della finestra ed oscura la vista degli altri
2. sezione 'Colonna button': il bottone è grafico oppure creato con codice? Nel secondo caso dove si deve mettere le 'mana' x colorarlo?
3. Proprietà: gridBox.GridOnly, ho aggiornato all'ultima release di gridbox la griglia è correttamente visualizzata solo se do':
4. sezione GridBoxNavigator: la sezione di esportazione mi piace proprio.
5. sezione 'Tools': buttons OK ed Annulla, non funzionano, mi sembra
6. Formattazione condizionale: ora mi sembra ok per i numeri, per le stringhe mi fa questa cosa testimniata dall'allegato. Il colore della prima riga è blu, ma se premo refresh diventa del colore voluto. Allego anche il codice
.Formatting.Count = 4
.Formatting[0].Comparison = "=C(tipo)='spa'"
.Formatting[0].Formatting.Background = Color.Green
.Formatting[0].Formatting.Foreground = Color.White
.Formatting[0].Formatting.Font.Bold = True
.Formatting[1].Comparison = "=C(tipo)='spp'"
.Formatting[1].Formatting.Background = Color.red
.Formatting[1].Formatting.Foreground = Color.White
.Formatting[1].Formatting.Font.Bold = True
.Formatting[2].Comparison = "=C(tipo)='cee'"
.Formatting[2].Formatting.Background = Color.Green
.Formatting[2].Formatting.Foreground = Color.White
.Formatting[2].Formatting.Font.Bold = True
.Formatting[3].Comparison = "=C(tipo)='ceu'"
.Formatting[3].Formatting.Background = Color.red
.Formatting[3].Formatting.Foreground = Color.White
.Formatting[3].Formatting.Font.Bold = True
Complimenti sono piccoli errori che cmq non tolgono nulla alla qualità eccezionale del componente. Aggiorno i miei software.
Milio ci sei? AUGURI prima di tutto!!
Ti segnalo questo strano comportamento del campo checkbox nella griglia: se dopo aver cliccato sul campo seleziono la barra di scorrimento con il campo check come ultimo campo della griglia), al momento del click sulla barra il controllo check visivamente si 'raddoppia'
Ulteriore domanda:
il campo check puo' riferirsi ad un campo booleano o ad un campo integer vero? Ho provato a creare un campo integer ma con il codice che segue e non mi da' errore:
campo boolean con definizione boolean e valori -1 e 0:
Inc Col_d
With GridBox4.Columns
.Hide = False
.Type = Grid.Type.Field
.Alignment = Align.Center
.DataType = Grid.DataType.Boolean
.Field = "effettivo"
.Text = "EFFETTIVO"
.Box.ValueCheck = -1
.Box.ValueUncheck = 0
.DefaultValue = 0
.w = 80
.Name = "fav"
End With
campo integer con definizione griglia boolean e valori 1 e 0:
Inc Col_d
With GridBox4.Columns[Col_d]
.Hide = False
.Type = Grid.Type.Field
.Alignment = Align.Center
.DataType = Grid.DataType.Boolean
.Field = "eff2"
.Text = "eff2"
.Box.ValueCheck = 1
.Box.ValueUncheck = 0
.DefaultValue = 0
.w = 100
.Name = "eff2"
End With
Cosa non funge? Che errori ti da?
riga 30 'missing As in GridBoxPlus.class:30' in compilazione
Property Read ScrollW, ScrollWidth As Integer