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.htmlModule 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.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é .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.
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 ![]() 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 dans 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
![]() 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 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é :
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.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"
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
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.