French Récupérer les valeurs d'une lisview

Charles COURNAULT

Member
Licensed User
Bonjour,
Débutant sous b4a, je cherche à développer une application pour aider ma mère a se repérer dans les jours et ses rendez-vous...
Tout fonctionne bien jusqu'à... la listview
J'ai une listview avec ses rendez-vous et j'utilise DBUtils.ExecuteListView(maBase,stSql,Null,0,ListeRdvParam,True) pour la compléter
La listview a 2 "colonnes" en twostrings : l'index dans mon fichier, le date+heure+libellé du rdv
Je veux pouvoir Modifier ou Supprimer un rdv quand je clique dessus

B4X:
Sub ListeRdvParam_ItemClick (Position As Int, Value As Object)
    Dim ts As twostrings   
    ts.Initialize
    ts=Value
    lblLabelA=ts.aLabel
    lblLabelB=ts.bLabel
    Msgbox(Position & "/"&lblLabelA & "/" &lblLabelB,"")
End Sub

le problème est qu'il me renvoie toujours le dernier item de la liste dans lblLabelA et lblLabelB, alors que position est ok :mad:

J'ai essayé ça et c'est pas mieux.

B4X:
Sub ListeRdvParam_ItemClick (Position As Int, Value As Object)
    Dim ts As twostrings   
    ts.Initialize
    ts=ListeRdvParam.GetItem(Position)
    lblLabelA=ts.aLabel
    lblLabelB=ts.bLabel
    Msgbox(Position & "/"&lblLabelA & "/" &lblLabelB,"")
End Sub

Merci pour votre aide
 

Charles COURNAULT

Member
Licensed User
Bonsoir,

J'ai beau prendre le problème dans tous les sens, avec des variables 'Label', des 'AddTwoLines2'... Il y a vraiment quelque chose qui m'échappe. J'ai toujours le dernier élément de la liste.

Je m'en sort en remplissant ma listview avec un AddTwoLines et en faisant simplement Msgbox(Value,"") sur l'_ItemClick : cela me donne mon label1 qui correspond à mon index dans la base de données.

Ça fonctionne mais je ne comprend pas.

Merci
 
Last edited:

Charles COURNAULT

Member
Licensed User
Voilà le code.
Je rempli la listeview dans le module "Param" sub "LireBase"
Je teste la lecture dans le module "Param" sub "ListeRdvParam_ItemClick"
Merci
 

Attachments

  • test3.zip
    90.1 KB · Views: 241

klaus

Expert
Licensed User
Longtime User
Essaies de déplacer Dim ts As twoStrings depuis le début de la routine lireBase au début de la boucle For / Next
B4X:
For i = 0 To Enreg.RowCount - 1
    Dim ts As twoStrings
    Enreg.Position=i
    ts.Initialize
    ts.aLabel=Enreg.GetLong("nordv")
    st=Module1.DateHeureToStringDate(Enreg.GetString("dateheure")) & " | "
    st=st & Module1.DateHeureToStringHeure(Enreg.GetString("dateheure")) & " | "
    st=st & Enreg.GetString("libelle")
    ts.bLabel= st
    'ListeRdvParam.AddTwoLines(ts.aLabel, ts.bLabel)
    ListeRdvParam.AddTwoLines2(ts.aLabel, ts.bLabel,ts)
Next
 

Charles COURNAULT

Member
Licensed User
Ok, merci, c'était ça.
Sans vouloir t'emmerder davantage, c'est quoi l'explication ?
Il faut déclarer les variables juste avant le .initialize ?

Par contre, je n'ai pas trouvé comment indiquer que ce fil est résolu.
 

klaus

Expert
Licensed User
Longtime User
Il faut déclarer les variables juste avant le .initialize ?
ts est un objet. Si tu Dim cet objet une fois tu initialises une instance de cet objet.
Si tu modifies cet objet, partout où tu utilises ce même objet la valeur est modifié.
C'est cette raison pour laquelle tu vois partout la dernière valeur.
Tu dois donc déclarer chaque fois une nouvelle instance dans la boucle For/Next pour avoir des valeurs différentes.
Par contre, je n'ai pas trouvé comment indiquer que ce fil est résolu.
Lorsque tu affiches le 'thread' to trouves en haut à droite Thread Tools. Cliques sur Edit Title et ajoutes [résolu].
upload_2016-1-10_12-44-48.png
 
Top