Autore Topic: DrawingArea e drag&drop [Risolto]  (Letto 790 volte)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
DrawingArea e drag&drop [Risolto]
« il: 23 Novembre 2020, 20:54:50 »
Ciao a tutti
Ho l'esigenza di fare un form tipo griglia, con la prima colonna i prossimi X giorni lavorativi e nella seconda colonna le "signore che devo andare a trovare"  :D :D ...Voglio scherzare per attirare la vostra attenzione  ;D ;D.
Allego immagine per far capire di cosa parlo
Vorrei spostare le "visite" con drag&drop e le visite possono essere anche più di una al giorno quindi ho optato per farlo con DrawingArea.
Non conosco bene il componente e meno ancora Drag&Drop.
Ho iniziato a buttare giù qualcosa, ma vorrei sapere se stò procedendo nel modo giusto.
Sono ben accette anche altre strade.
Grazie
« Ultima modifica: 24 Novembre 2020, 11:50:04 da Golia »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:DrawingArea e drag&drop
« Risposta #1 il: 23 Novembre 2020, 21:12:24 »
Sinceramente sto pensando che potrei farlo anche con una semplice gridview, come si fa a fare il drag&drop delle celle?

ps: come non detto
Codice: [Seleziona]
 Private newrow As Integer
 Private newcol As Integer
 Private oldrow As Integer
 Private oldcol As Integer

Public Sub GridView1_Drag()
  oldrow = GridView1.RowAt(Drag.y)
  oldcol = GridView1.ColumnAt(Drag.x)

End

Public Sub GridView1_Drop()
  newrow = GridView1.RowAt(Drag.y)
  newcol = GridView1.ColumnAt(Drag.x)
  Print "sposto da:" & oldrow & "," & oldcol & " -A--> " & newrow & "," & newcol
End

Public Sub GridView1_MouseDrag()
 
 GridView1.Drag("")
 
End
« Ultima modifica: 23 Novembre 2020, 21:45:34 da Golia »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:DrawingArea e drag&drop
« Risposta #2 il: 23 Novembre 2020, 22:48:10 »
Ecco un esempio di post perfetto, l'utente pone una domanda e subito dopo si da la risposta corredata da codice  :ok:

 :D  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:DrawingArea e drag&drop
« Risposta #3 il: 23 Novembre 2020, 22:57:33 »
Si, ma non ho ancora deciso come procedere, se con drawingarea o gridview. Faccio altre prove intanto. Se qualcun altro vuole provare...magari salta fuori un bel organizer per appuntamenti  ;D ;D

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:DrawingArea e drag&drop
« Risposta #4 il: 23 Novembre 2020, 23:07:16 »
Io voterei per la grid, ma ora devo andare a dormire.
Domani provo a fare qualcosa e ti dico.

Buonanotte  :sleepy:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:DrawingArea e drag&drop
« Risposta #6 il: 24 Novembre 2020, 11:49:44 »
Ho optato per la grid
@vuott non sai quanto ho cercato... e come sempre non guardo nella wiki   :hatecomputer:  ...cè un mondo
Grazie mille

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:DrawingArea e drag&drop
« Risposta #7 il: 24 Novembre 2020, 12:19:17 »
Ho optato per la grid
@vuott non sai quanto ho cercato... e come sempre non guardo nella wiki   :hatecomputer:  ...cè un mondo
Grazie mille

Cioè hai fatto questo:
Codice: [Seleziona]
Public Sub Form_Open()

  With GridView1
    .Columns.Count = 3
    .Rows.Count = 3
  End With

  GridView1[1, 0].Text = "testo qualsiasi"
  GridView1.Columns[0].W = -1

End

Public Sub GridView1_MouseDrag()
 
' Preleviamo e trasciniamo il testo individuando precisamente la cella della "GridView":
 GridView1.Drag(GridView1[GridView1.RowAt(Mouse.Y), GridView1.ColumnAt(Mouse.X)].Text, "text/html")
 GridView1[GridView1.RowAt(Mouse.Y), GridView1.ColumnAt(Mouse.X)].Text = ""

End


Public Sub GridView1_Drop()
 
' Rilasciamo nella cella della seconda "GridView" il testo prelevato nella prima "GridView":
 GridView1[GridView1.RowAt(Drag.Y), GridView1.ColumnAt(Drag.X)].Text = Drag.Data
 
' Adatta la cella della seconda "GridView" alla dimensione del testo ricevuto:
 GridView1.Columns[GridView1.ColumnAt(Drag.X)].W = -1
 
End

Secondo i dettami di vuott?

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:DrawingArea e drag&drop [Risolto]
« Risposta #8 il: 24 Novembre 2020, 16:12:39 »
non esattamente, la fonte dei dati è un database.
Come da te descritto sposto il valore cella, io devo andare a cambiare la data nel record, quindi ho un array con caricato gli id di ogni riga, quindi nell'evento GridView1_Drop() prelevo l'id corrispondente e vado a fare l'update.
Ti posto un pò di codice che è sempre bello vederlo  :D
Codice: [Seleziona]
' Gambas class file

Private datecaricate As New Date[]
Private consDay As New String[]
Private conscaricate As New String[]

Private newrow As Integer
Private oldrow As Integer


Public Sub _new()

Refresh()

End

Public Sub Refresh()
caricadate(Now, SpinBox1.Value)
loadgrid()
End


Private Sub caricadate(datainizio As Date, numerogiorni As Integer)
Dim i, ic As Integer
conscaricate.Clear
datecaricate.Clear
    For i = 0 To numerogiorni - 1
        If WeekDay(DateAdd(datainizio, gb.Day, i)) = 6 Then Continue
        If WeekDay(DateAdd(datainizio, gb.Day, i)) = 0 Then Continue
       
        If caricaconsegne(DateAdd(datainizio, gb.Day, i)) = True Then
                  For ic = 0 To consDay.Count - 1
                        conscaricate.Add(consDay[ic])
                        datecaricate.Add(DateAdd(datainizio, gb.Day, i))
                  Next
              Else
                  conscaricate.Add("0")
                  datecaricate.Add(DateAdd(datainizio, gb.Day, i))
        Endif

    Next
End



Public Sub loadgrid()
 Dim i, ic As Integer

  GridView1.Clear

                GridView1.Mode = Select.Single
               
                GridView1.Header = GridView1.Horizontal
                GridView1.Columns.Count = 3             
                GridView1.Columns[0].Text = "Data"     
                GridView1.Columns[2].Text = "Consegna" 
                GridView1.Columns[0].Alignment = Align.Right
                GridView1.Columns[0].Width = 180
                GridView1.Columns[1].Width = 20
                GridView1.Rows.Count = datecaricate.Count 

                For i = 0 To datecaricate.Count - 1
                  GridView1[i, 0].Text = Format(datecaricate[i], "dddd dd-mm")
                  GridView1[i, 2].Text = testoconsegna(conscaricate[i])
                Next
  Catch
  Message.Error(Error.Text)
 
End




Private Sub testoconsegna(idprev As Integer) As String
Dim sql, stringa As String
Dim MyRS As Result
Dim i As Integer

sql = "SELECT clienti.cognome, clienti.idcliente, clienti.nome, preventivi.consegnato, preventivi.accettazione, preventivi.dataconsegna, preventivi.idpreventivo, preventivi.consegna, preventivi.giornilavoro, preventivi.descrizionelavoro " &
                     "FROM preventivi " &
                     "INNER JOIN clienti on preventivi.idcliente=clienti.idcliente " &
                     "WHERE preventivi.idpreventivo ='" & idprev & "';"

MyRS = Avvio.$myconn.Exec(sql)
    If MyRS.Available = True Then
           stringa = MyRS!cognome & " " &
                     MyRS!nome & " " &
                     MyRS!descrizionelavoro
           Return stringa
        Else
           Return ""
    Endif

End



Private Sub caricaconsegne(mdata As Date) As Boolean
Dim sql As String
Dim MyRS3 As Result
Dim i As Integer

sql = "SELECT clienti.cognome, clienti.idcliente, preventivi.consegnato, preventivi.accettazione, preventivi.dataconsegna, preventivi.idpreventivo, preventivi.consegna, preventivi.giornilavoro, preventivi.descrizione " &
                     "FROM preventivi " &
                     "INNER JOIN clienti on preventivi.idcliente=clienti.idcliente " &
                     "WHERE preventivi.consegna='-1' AND preventivi.accettazione='-1' AND preventivi.consegnato='0' AND dataconsegna ='" & Format(mdata, "yyyy-mm-dd") & "';"

consDay.Clear
MyRS3 = Avvio.$myconn.Exec(sql)
    If MyRS3.Available = True Then
       i = 0
          For Each MyRS3
                consDay.Add(MyRS3!idpreventivo)
                  Inc i
          Next
        Return True
    Endif

End

Public Sub GridView1_DblClick()

If GridView1[GridView1.Row, 2].Text <> "" Then FConsegna.Run(conscaricate[GridView1.Row])
End

Public Sub GridView1_click()
oldrow = GridView1.Row
End

Public Sub GridView1_Drag()
  ' oldrow = GridView1.RowAt(Drag.y)
End

Public Sub GridView1_Drop()
  newrow = GridView1.RowAt(Drag.y)
  spostaconsegna()
End

Public Sub GridView1_MouseDrag()
 GridView1.Drag("")
End


Private Sub spostaconsegna()
Dim MyRS As Result
MyRS = Avvio.$myconn.Edit("preventivi", "idpreventivo=" & conscaricate[oldrow])

            MyRS!dataconsegna = CDate(datecaricate[newrow])

      MyRS.Update ' aggiorno
      Avvio.$myconn.Commit
Refresh()
End




Public Sub BtRefresh_Click()
Refresh()
End

Grazie !  :2birre: :2birre:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:DrawingArea e drag&drop
« Risposta #9 il: 26 Novembre 2020, 16:12:37 »
e come sempre non guardo nella wiki

« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:DrawingArea e drag&drop [Risolto]
« Risposta #10 il: 26 Novembre 2020, 21:25:59 »
 ;D
ti devo un pò di birre Vuott!!  :2birre: :2birre: