Listin Gambas2

Création d'un programme en Gambas2 : un répertoire téléphonique pas à pas

Origine : http://listingambas.blogspot.com/2011/06/modulo-gestion-editar.html


Module de gestion: Editer Modifier

Une fois créés les enregistrements de données, au fil du temps nous avons besoin de mettre à jour (typiquement un changement de n° de mobile entreprise) ou compléter par des informations que nous n'avions tout simplement pas eu. (ex : Photo)
Eh bien, c'est dans ce module qu'est développé le code pour le faire.



Comment choisir la fiche à modifier? Propriété. Row
Eh bien, il y aurait plusieurs façons. L'une d'elle demanderait l'ID à l'utilisateur par exemple, et passerait à l'édition.
je pense à un
utilisateur "plus intuitif" cliquant sur le gridViewDonnees dans la ligne, et modifiant dans la ligne cliquée les données qu'elle contient.
Pour cela nous avons besoin de la propriété. Row GridViewDonnees, qui nous dit dans quelle rangée nous avons cliqué .


Un seul enregistrement: champ ID
Mais il nous manque encore une chose importante pour modifier l'enregistrement.
Connaissant la ligne, nous avons besoin de savoir le var.ID associé  (numéro qui identifie «univoquement» un
enregistrement).
Parce que si nous choisissons un autre champ (nom, etc ), il peut correspondre à plusieurs enregistrements avec les mêmes données, mais pas le même ID.

Pour cela , nous allons ajouter une colonne à notre gridViewDonnees (pas besoin de donner la largeur et le titre) et écrire cet ID de l'enregistrement.
Il faut modifier
MODULE TITRE :

Procédure: definir()
dans la ligne:
.columns.COUNT  = 16
remplacer par:
.columns.COUNT = 17

Procédure: fill ()
Ajouter la ligne:
.GridViewDonnees[a, 15].text = var.date_donnees[a]
.GridViewDonnees[a, 16].text = var.id[a]
END WITH

Ainsi la colonne 17, contiendra les informations pour nous aider à identifier l'enregistrement à l'édition.
Les gridviews commencent à compter à 0, mais les colonnes visibles sont numérotées à partir de 1, donc un gridview qui a 5 colonnes ( . colonnes . COUNT = 5 ) , compte en réalité "0,1,2,3,4" et si nous mettons une entrée dans la colonne 5, nous devons dire 4 au gridviews.
 GridViewDatos [a, 4]. text = chose_a_mettre



Nous passons maintenant à "modifier" l'inscription à la ligne choisie et indiquons en quelque sorte que nous sommes en mode édition.
Nous allons mettre la propriété
. enabled (c.à d. activée) du gridviewdonnees à = False.
Puis, à la fin de notre édition, il y aura un retour à la normale (.
enabled= true).

Sur le formulaire Fmain:
PUBLIC SUB GridViewDonnes_Click()
GridViewDonnes.enabled=false
gestion.editer(GridViewDonnes[GridViewDatos.Row, 16].text)
END


Ainsi nous appelons une procédure du module Administration nommée Editer.
Nous appellerons la fonction d'édition de l'enregistrement avec l'ID contenu dans la ligne cliquée d
ans le module  gestion.
Nous avons besoin de trouver le numéro d'enregistrement contenant cet ID, ce que l'on résout avec une fonction qui connaissant le numéro
d'identification renvoie le n° d'enregistrement ou, au pire, un message d'erreur:


PUBLIC FUNCTION TrouverIDdonnee(id AS String) AS Integer
DIM a AS Integer
FOR a = 0 TO var.id.COUNT - 1
IF id = var.id[a] THEN
RETURN a
ENDIF
NEXT
Message.Error("Il n'y a pas d'enregistrement avec l'identifiant " & ID)
RETURN -1





Remarque importante: les paranthèses () ce n'est pas la  même chose que les crochets []
Les parenthèses () indiquent des fonctions qui passent une valeur (qui est entre les parenthèses)
Entre crochets [] c'est l'indice désignant une donnée dans une matrice ou tableau.



Cette fonction est appelée à l'intérieur du sous-programme principal Modifier .
PUBLIC SUB editer(id AS String)
DIM registre AS Integer
registre = trouverIDdonnee(id)
IF registre = -1 THEN
Message.Info("Impossible d'éditer, données corrompues")
ELSE
var.etat = "Edition"
var.RegistreEdite = registre
WITH FMain
.PictureBoxPhoto.Picture = picture[var.photo[registre]]
.TextBoxDNI.text = var.dni[registre]
.TextBoxNom.text = var.nom[registre]
.TextBoxPrenoms.text = var.prenoms[registre]
.TextBoxEntreprise.text = var.entreprise[registre]
.TextBoxPoste.text = var.poste[registre]
.TextBoxTelEntreprise.text = var.tel_entreprise[registre]
.TextBoxTelfPerso.text = var.tel_perso[registre]
.TextBoxFax.text = var.fax[registre]
.TextBoxMobilEntreprise.text = var.mobile_entreprise[registre]
.TextBoxMobilPerso.text = var.mobile_persoi[registre]
.TextBoxWEB.text = var.page[registre]
.TextBoxAdresse.text = var.adresse[registre]
.TextBoxComments.text = var.commentaires[registre]
.TextBoxDate.text = var.date_donnees[registre]
.TextBoxMail.text = var.cMail[registre]
END WITH
var.Chemin_Photo = var.Photo[registre]
ENDIF
END

Par ailleurs, nous définissons d'autre variables globales (dans le module
var )
PUBLIC etat AS string
PUBLIC registreEdite  AS integer
pour informer le programme que l'on est en "édition" de données et non en mode "introduction des données", ce qui permettra aux boutons Accepter / Supprimer / Annuler d'agir différemment.



Le bouton Accepter en mode Edition.


Le bouton Accepter doit se comporter différemment de ce qu'il fait lorsque nous entrons les données.
Comment pouvons-nous faire?
Avec
la variable globale "état" et un simple 
“If ….Then” ! Si l'État est «d'édition», nous appuyons sur le bouton pour accepter d'écrire les nouvelles données dans le même enregistrement, si nous ne sommes pas en train d'éditer, il faudra les ajouter comme expliqué antérieurement.

On entre le code modifié :

code du Formulaire FMAIN

PUBLIC SUB ButtonAcepter_Click()
IF var.etat<> "Edition" then
''on ajoute les données de la matrice de saisie
var.id.add("Id" & Str$(Now))
var.dni.add(TextBoxDNI.text)
var.nom.add(TextBoxNom.Text)
var.prenoms(TextBoxPrenoms.Text)
var.entreprise.add(TextBoxEntreprise.Text)
var.poste.add(TextBoxPoste.Text)
var.tel_entreprise.add(TextBoxTelEntreprise.Text)
var.tel_perso..add(TextBoxTelPerso.text)
var.fax.add(TextBoxFax.Text)
var.mobile_entreprise(TextBoxMobilEntrepriseText)
var.mobile_perso.add(TextBoxMobilPersor.Text)
var.page.add(TextBoxWEB.Text)
'dans Photo, on range le chemin vers les images
var.photo.add(var.chemin_photo)
var.adresse.add(TextBoxAdresse.Text)
var.commentaires.add(TextBoxComments.Text)
var.date_donnees.add(TextBoxDate.Text)
var.mail.Add(TextBoxmail.Text)
var.change = "oui"

if var.etat= "Edition" then
var.dni[var.RegistreEdite] = TextBoxDNI.text
var.nom[var.RegistreEdite] = TextBoxNom.Text
var.prenoms[var.RegistreEdite] = TextBoxPrenoms.Text
var.entreprise[var.RegistreEdite] = TextBoxEntreprise.Text
var.poste[var.RegistreEdite] = TextBoxPoste.Text
var.tel_entreprise[var.RegistreEdite] = TextBoxTelEntreprise.Text
var.tel_perso[var.RegistreEdite] = TextBoxTelfPerso.text
var.fax[var.RegistreEdite] = TextBoxFax.Text
var.mobile_entreprise[var.RegistreEdite] = TextBoxMobilEntreprise.Text
var.mobile_perso[var.RegistreEdite] = TextBoxMobilPerso.Text
var.page[var.RegistreEdite] = TextBoxWEB.Text
'dans Photo, on range le chemin vers les images
var.Poto[var.RegistreEdite] = var.chemin_photo
var.adresse[var.RegistreEdite] = TextBoxAdresse.Text
var.commentaires[var.RegistreEdite] = TextBoxComments.Text
var.date_donnees[var.RegistreEdite] = TextBoxDate.Text
var.mail[var.RegistreEdite] = TextBoxMail.Text
'se da por compluido el estado de edicion
var.change = "oui"
endif

'Mettre à vide la propriété .Text des textbox
PictureBoxphoto.Picture = Picture["icon:/96/gambas"]
TextBoxDNI .text  = ""
TextBoxnom .text  = ""
TextBoxprenoms
.text  = ""
TextBoxEntreprise
.text  = ""
TextBoxPoste
.text  = ""
TextBoxTelEntreprise
.text  = ""
TextBoxTelPerso
.text  = ""
TextBoxFax
.text  = ""
TextBoxMobilEntreprise
.text  = ""
TextBoxMobilPerso
.text  = ""
TextBoxWEB
.text  = ""
PictureBoxphoto.Picture = ""
TextBoxAdresse
.text  = ""
TextBoxComments
.text  = ""
TextBoxDate
.text  = ""
TextBoxmail
.text  = ""

' écriture des données saisies dans la grille
  titre.remplir()
' setfocus mis en tête des données
  TextBoxDNI.SetFocus
' l'état édition est accompli
  var.etat = ""
' grille à nouveau accessible
  GridViewDonnees.enabled = TRUE
END


Note : La partie du code sur fond bleu est la partie ajoutée.