Metodo nel cambio riga in DATALISTVIEW

Forum dedicato ai programmatori di X# in lingua italiana – Italian language forum

Moderator: wriedmann

Post Reply
User avatar
claudiocarletta
Posts: 101
Joined: Sat Sep 05, 2020 8:56 am

Metodo nel cambio riga in DATALISTVIEW

Post by claudiocarletta »

Salve a tutti,
Ho un po' di problemi sa sottoporvi ma forse è meglio che faccia un topic per ognuno.
Dopo che ho dato il focus ad una DATALISTVIEW, quando scorro con le frecce in alto o in basso in una lista di alunni, vorrei che un metodo di callback mi intercettasse il cambio di record per eseguire un metodo per la ricerca dei libri in prestito al nuovo alunno puntato.
Ho provato con i tre metodi sotto elencati ma nessuno di questi intercetta il cambio record.

method VerticalSpin(oSpinEvent)
super:VerticalSpin(oSpinEvent)
//Put your changes here
SELF:oTab_1:CercaLibriPrestati( )
return NIL

method VerticalSlide(oSlideEvent)
super:VerticalSlide(oSlideEvent)
//Put your changes here
SELF:oTab_1:CercaLibriPrestati( )
return NIL

method VerticalScroll(oScrollEvent)
super:VerticalScroll(oScrollEvent)
//Put your changes here
SELF:oTab_1:CercaLibriPrestati( )
return NIL

Qual è il metodo che intercetta questo evento?
Grazie a tutti e buona serata
User avatar
Chris
Posts: 4593
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

Metodo nel cambio riga in DATALISTVIEW

Post by Chris »

Claudio,

Not sure if this was improved sometime after I stopped programming in VO, but at least in the past handling ListView controls like that was a little difficult to handle in the VOGUI classes, only way was by using the ControlNotify() method and add some code:

Code: Select all

METHOD ControlNotify(oControlNotifyEvent)
   LOCAL sInfo AS _winNM_LISTVIEW
   LOCAL nIndex AS INT
   IF oControlNotifyEvent:Control == SELF:oDCListView1
      IF DWORD(oControlNotifyEvent:NotifyCode)== LVN_ITEMCHANGED
         sInfo := PTR(_CAST, oControlNotifyEvent:lParam)
         nIndex := sInfo.iItem // which item
      ENDIF
   END IF
RETURN SUPER:ControlNotify(oControlNotifyEvent)
In this code, "sInfo" contains all the info you need, which item was selected or changed. There is documentation about this here https://docs.microsoft.com/en-us/window ... nmlistview

Of course in the Windows Forms classes, it is extremely easy to do this with only one line of code..
Chris Pyrgas

XSharp Development Team test
chris(at)xsharp.eu
User avatar
wriedmann
Posts: 3658
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Metodo nel cambio riga in DATALISTVIEW

Post by wriedmann »

Ciao Claudio,
guardati i metodi ListViewItemChanged() e ListViewItemChanging() nella classe Window.
Dovrebbero essere quello che cerchi.
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
claudiocarletta
Posts: 101
Joined: Sat Sep 05, 2020 8:56 am

Metodo nel cambio riga in DATALISTVIEW

Post by claudiocarletta »

Grazie Wolfgang, se mi invii un esempio forse è meglio, in rete non riesco a trovare nulla
Ciao
Claudio
User avatar
wriedmann
Posts: 3658
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Metodo nel cambio riga in DATALISTVIEW

Post by wriedmann »

Ciao Claudio,
non cercare in rete, ma nell'aiuto di VO 2.8!
Li è documentato tutto,
Se non trovi niente, ti posso preparare in esempio.
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
claudiocarletta
Posts: 101
Joined: Sat Sep 05, 2020 8:56 am

Metodo nel cambio riga in DATALISTVIEW

Post by claudiocarletta »

Ciao Wolfgang
1) Dove lo trovo l'aiuto di VO 2.8? Ti ricordo che mi sono fermato più di una decina di anni fa al 2.5.
2) come faccio a disabilitare temporaneamente il collegamento tra la DATALISTVIEW e il suo server? Altrimenti durante il popolamento del DBF esegue tutte le query su MySQL
Saluti
Claudio
User avatar
claudiocarletta
Posts: 101
Joined: Sat Sep 05, 2020 8:56 am

Metodo nel cambio riga in DATALISTVIEW

Post by claudiocarletta »

Grazie Chris,
purtoppo il metodo che mi hai suggerito viene invocato quando ha già abbandonato il record puntato.
User avatar
wriedmann
Posts: 3658
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Metodo nel cambio riga in DATALISTVIEW

Post by wriedmann »

Ciao Claudio,
senza l'aiuto di VO non ci lavoro neanche io dopo oltre vent'anni....non posso sapere a memoria tutto.
Se nella IDE vai su Help - Index si apre l'aiuto e se vai su "Indice" riesci a cercare quelllo che ti serve.

Da me l'aiuto dice:
Window:ListViewItemChanged() Method
Purpose:
Provide a method that is invoked when a list view item has changed.
Important! This is a callback method used by Visual Objects. Normally, it should not be called in your application code.
Syntax:
<oWindow>:ListViewItemChanged(<oListViewItemEvent>) ---> NIL
Arguments:
<oListViewItemEvent> The ListViewItemEvent object that describes which list view item has changed.
Description:
The ListViewItemChanged event handler notifies a list view control's parent window that an item has changed.

Un esempio lo preparo subito.

Per quanto riguarda di disabilitare il collegamento dovresti riuscire con SuspendNotification() e poi ristabilire con ResetNotification() sul DBServer.
Però non capisco come il popolamento del DBF possa eseguire le query sy MySQL.

Personalmente non lavoro con il DataListView, ma con il ListView normale e ci penso io alle operazioni di lettura.

Saluti

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
wriedmann
Posts: 3658
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Metodo nel cambio riga in DATALISTVIEW

Post by wriedmann »

Ciao Claudio,
allora, come spiega l'aiuto i due metodi vengono chiamati in due momenti differenti:

Code: Select all

method ListVieItemChanged( oEv ) class MyWindow
local oEvent as ListViewItemEvent
oEvent := oEv
super:ListViewItemChanged( oEvent )
// oEvent:ListViewItem ritorna il ListViewItem che è appena stato selezionato
return nil
Questo metodo, se lo implementi nella tua finestra, viene chiamato non appena una riga viene selezionata.
Il metodo

Code: Select all

method ListVieItemChangeing oEv ) class MyWindow
local oEvent as ListViewItemEvent
oEvent := oEv
super:ListViewItemChanging( oEvent )
// oEvent:ListViewItem ritorna il ListViewItem che sta per essere lasciato
return nil
viene chiamato prima che una riga viene lasciata per un'altra, dandoti per esempio la possibilità di salvare eventuali modifiche.
Nella finestra che vedu sotto ho combinato un ListView con una DataWindow - l'utente può modificare i data nella finestra dettaglio e al momento di cambiare riga nel ListView questi vengono salvati.
jpm.png
jpm.png (58.96 KiB) Viewed 408 times
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
claudiocarletta
Posts: 101
Joined: Sat Sep 05, 2020 8:56 am

Metodo nel cambio riga in DATALISTVIEW

Post by claudiocarletta »

Grazie Wolfgang,
funziona perfettamente, all'inizio non funzionava perché fidandomi troppo non ho controllato che il metodo l'avevi chiamato
ListVieItemChanged( oEv ) invece che ListViewItemChanged( oEv ).

Grazie sempre
Saluti Claudio
p.s. al prossimo problema
Post Reply