Autore Topic: Creazione componente: gb.gridbox  (Letto 117031 volte)

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Creazione componente: gb.gridbox
« Risposta #495 il: 14 Luglio 2011, 10:07:14 »
Troppo forte! Ci tengo assolutamente a collaborare/attivarmi x la stesura di un manuale utente, sto lavoro è troppo importante. :2birre: :-*

Ti faccio sapere gli sviluppi, come al solito. Buona giornata

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Creazione componente: gb.gridbox
« Risposta #496 il: 14 Luglio 2011, 10:13:38 »
@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:
Codice: [Seleziona]
.Box.ListCombo = GridBox1.ReturnCollection("SELECT Idcontatto, Cognome || ' ' || Nome FROM Contatti ORDER BY Cognome,Nome;") 

prova cosi':
Codice: [Seleziona]
.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:

Codice: [Seleziona]
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

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.271
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #497 il: 14 Luglio 2011, 10:40:24 »
Ops... non avevo capito che ci si riferiva la riempimento di una Lista

E pensare che ce l'ho avuto sotto il naso per tutta la lettura/scrittura del post...
Maledetto copia-incolla  :hatecomputer: :rotfl:


Sorry  :-[
« Ultima modifica: 14 Luglio 2011, 10:42:37 da milio »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #498 il: 14 Luglio 2011, 11:54:55 »
Grandissimo!!!!!!
Con questa cosa un'utente non programmatore può costruirsi un gestionale!!!
Abbiamo superato sicuramente Access
Grazie per tutto questo  :2birre: :2birre: :2birre: :2birre: :2birre: :2birre: :2birre:

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Creazione componente: gb.gridbox
« Risposta #499 il: 14 Luglio 2011, 12:51:12 »
non bisogna lesinare i ringraziamenti a milio x lo stupendo lavoro, il minimo che si puo' fare è aiutarlo nella stesura dell'help

 :2birre: :2birre: :2birre: :2birre: :2birre: :2birre: :2birre: :-* :-* :-* :ok: :ok: :ok: :ok:

@milio

Alcune mie considerazioni:
1. è un componente incredibile, per la prima volta ho creato l'applicativo come volevo
2. in queste due settimane l'ho sfruttato a fondo e ho trovato poche cose da sistemare (secondo pero' il mio personale punto di vista):
- allineamento degli headers delle colonne: mi sembra che sia a sx soltanto
- problemino del null nella formula relativa alla colonna risolto, anche se nel campo compare, dopo il save il fastidioso #ERR, comunque sopportabile
- sort a due colonne mi sembra che il LoadData non lo preveda
- Buttons in griglia: graficamente li farei + piccoli e con maggiore accuratezza, volevo aiutarti ma li fai col codice
3. il componente potrebbe in futuro prevedere due diversi tipi di sets: un sets veloce, si da' una tabella e un db in pasto al componente e lui legge e crea la griglia in automatico, e poi un sets personalizzato dove è possibile lavorare di fino. Come quello di addesso. In pratica il primo già l'hai fatto, sta nell'esempio di gridbox dove carichi il db e la tabella.
« Ultima modifica: 14 Luglio 2011, 13:35:36 da andy60 »

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Creazione componente: gb.gridbox
« Risposta #500 il: 14 Luglio 2011, 13:37:38 »
Grandissimo!!!!!!
Con questa cosa un'utente non programmatore può costruirsi un gestionale!!!
Abbiamo superato sicuramente Access
Grazie per tutto questo  :2birre: :2birre: :2birre: :2birre: :2birre: :2birre: :2birre:


se qualcuno veramente forte creasse una routine grafica di dragging per replicare la finestra di creazione delle query di access, l'applicativo access potrebbe diventare una realtà, lo 'famo noi..' detto alla romana

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.271
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #501 il: 14 Luglio 2011, 18:46:50 »
Ieri ho accontentato Golia e oggi penso di accontentare Andy  ;D

New Release:

GridBox.AlignementHeader
Allineamento del testo della testata di ogni colonna

GridBox.Columns[].AlignementHeader
Allineamento del testo della testata della singola colonna

Ovviamente da testare...  :ciao:
« Ultima modifica: 23 Luglio 2011, 00:34:56 da milio »

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.271
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #502 il: 15 Luglio 2011, 17:42:18 »
Stavo valutando la colonna tipo Button e così com'era strutturata, cioè che per ogni riga veniva fuori un bottone nella cella, non aveva senso.  :bad:

Allora ci ho aggiunto la possibilità di render visibile o no il bottone in base al risultato dell'interrogazione della proprietà Formatting della colonna.  :ok:
Nell'esempio allegato ho fatto in modo che se il nome del fornitore è Gino non appare il bottone in cella.

Spero che a qualcuno questa cosa serva  :)
« Ultima modifica: 23 Luglio 2011, 00:35:07 da milio »

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Creazione componente: gb.gridbox
« Risposta #503 il: 16 Luglio 2011, 09:37:54 »
Sono a parigi, appena ho il pc tra le mani rispondo, buon we!

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.271
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #504 il: 17 Luglio 2011, 00:57:58 »
Nuova release:

Corretto bug su caricamento record vuoto.

Aggiunto esempio biblioteca redatto da Golia

« Ultima modifica: 23 Luglio 2011, 00:35:19 da milio »

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Creazione componente: gb.gridbox
« Risposta #505 il: 18 Luglio 2011, 07:55:29 »
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:

Codice: [Seleziona]
  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.
« Ultima modifica: 18 Luglio 2011, 09:37:14 da andy60 »

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.271
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #506 il: 18 Luglio 2011, 14:34:04 »
@Andy

1) Dovrei aver messo a posto tutto con questa release

2) Questo e' un difetto dell GridView, non posso farci niente... devi aver la cortezza di mettere sempre per ultima una colonna .Hide = True

3) Prova a passargli i dati nella proprietà "RichText" e non in "Text"

4) Detto... Fatto :) 2 nuove proprietà in GridBox:

      Property Read WaitingInSave As Boolean (se a True ci sono dei dati da salvare)
      Property MonitoringSave As Boolean (serve per attivare il controllo sui record da salvare e visualizza a video una Message.Warning)

5)  :-\ non so che di' :)
« Ultima modifica: 23 Luglio 2011, 00:35:33 da milio »

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Creazione componente: gb.gridbox
« Risposta #507 il: 18 Luglio 2011, 19:22:18 »
Grande! Richtext cosi' come mi hai suggerito funziona! Sul resto (save monitorato) devo:

a) abilitare il controllo con (esempio):

Codice: [Seleziona]
gridbox1.MonitoringSave = True

b) come faccio a gestire lo stato, dove utilizzo il valore gridbox1.WaitinInSave?
« Ultima modifica: 18 Luglio 2011, 19:34:46 da andy60 »

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.271
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #508 il: 18 Luglio 2011, 20:06:45 »
Esempio sulla chiusura del form:

Public Sub Form_Close()

  If Me.GridBox1.WaitinInSave Then
    If Message.Warning("Ci sono dei dati non salvati: continuo con la chiusura del Form?","Si","No") = 2 Then Stop Event
  EndIf

End


Questa proprietà ti indicherà sempre se ci sono o meno dei dati in attesa di essere salvati.

Per quanto riguarda MonitoringSave attiva il controllo sulle funzioni interne della stessa GridBox (vedi LoadData()), che non sono gestibili con eventi esterni.
« Ultima modifica: 18 Luglio 2011, 20:09:16 da milio »

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.256
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Creazione componente: gb.gridbox
« Risposta #509 il: 18 Luglio 2011, 20:39:37 »
Esempio sulla chiusura del form:

Public Sub Form_Close()

  If Me.GridBox1.WaitinInSave Then
    If Message.Warning("Ci sono dei dati non salvati: continuo con la chiusura del Form?","Si","No") = 2 Then Stop Event
  EndIf

End


Questa proprietà ti indicherà sempre se ci sono o meno dei dati in attesa di essere salvati.

Per quanto riguarda MonitoringSave attiva il controllo sulle funzioni interne della stessa GridBox (vedi LoadData()), che non sono gestibili con eventi esterni.

denghiu :2birre: