GB3- Sélection multiple des lignes d'une columnView

Rédigé par spheris Aucun commentaire
Classé dans : apprentisssage, Columnview, Gridview, Tutoriel, Widget Mots clés : aucun


Bonjour,
Aujourd'hui nous allons voir des notions essentielles sur la ColumnView.


A) Rappel sur les listes


Une simple variable peut être de plusieurs types:

Integer : nombre
Float : Nombre à virgule
String : une chaine de caractère

Une liste c'est un tableau qui pourrait définir un nombre de variables de même type.
Exemple :

je défini deux textes dans deux variables distinctes comme ceci:

Dim a As String
Dim b As String
a = "toto"
b="tata"


Mais je pourrais très bien imaginer créer une liste avec ces deux variables comme ceci:

Dim t as New String[2]
t[0] = "toto"
t[1]= "tata"


Information importante: L'index c'est à dire le numéro ou la clef (KEY en Anglais) qui pointe le texte commence toujours par 0.

Cette notion de KEY est importante dè que l'on parle de liste.

B) Définition de la ColumnView


Une ColunmView est tout simplement une grille dans laquelle une grand nombre de données sont stockées de façon visuelles.
Par définition, une liste peut accueillir un grand nombre de données, comme la ColumnView.
D'où la similitude de gestion de la ColumnView et des listes.

C) Création d'une columnview.

Pour notre exemple, nous allons créer une columnview de 3 lignes et de 4 colonnes avec des largeurs bien définies.

Ouvrir l'IDE gambas et créez un nouveau projet.
Dans la boite de Widgets , choisissez une ColumnView
Par défaut le nom est ColumnView1

Double cliquez en dehors de la columnview sur la Form, l'editeur de code s'ouvre.
Ecrivez dans la méthode Form_open() ainsi créée la ligne suivante:

Public Sub Form_Open()
ColumnView1.Columns.Count = 4
End


Maintenant dans chacune des colonnes, nous allons définir un texte et une largeur comme ceci :

colonne 1 : largeur 50 et le texte : "Nom"
colonne 2 : largeur 100 et le texte : "Prénom"
colonne 3 : largeur 150 et le texte : "Date"
colonne 4 : largeur 250 et le texte : "Téléphone"

Si j'analyse le contenu de ce que je veux faire, J'ai 4 valeurs String(du texte) et 4 valeurs Integer(des largeurs de colonnes)
Je pourrais écrire smplement ceci :

ColumnView1.Columns[0].Text = "Nom"
ColumnView1.Columns[1].Text = "Prénom"
ColumnView1.Columns[2].Text = "Date"
ColumnView1.Columns[3].Text = "Téléphone"
ColumnView1.Columns[0].Width = 50
ColumnView1.Columns[1].Width = 100
ColumnView1.Columns[2].Width = 150
ColumnView1.Columns[3].Width = 250


Mais comme nous maitrisons les listes ;-) , nous allons créer deux listes distinctes.
Une liste de type String contenant les noms des colonnes, et une de type integer contenant les tailles des colonnes.
Tout ça dans une petite boucle For Next et le tour est joué.

Création de mes deux listes comme ceci:

Private myname As String[] = ["Nom", "Prénom", "Date", "Téléphone"]
Private mysize As Integer[] = [50, 100, 150, 250]


création de ma boucle :

Public Sub Form_Open()
Dim a As Integer
ColumnView1.Columns.Count = 4
For a = 0 To 3
ColumnView1.Columns[a].Text = myname[a]
ColumnView1.Columns[a].Width = mysize[a]
Next
End


la variable a a été crée comme index, variant de 0 à 3 soit 4 colonnes.

Un énorme avantage de cette façon de programmer est que vos noms de colonnes sont au début de votre formulaire et facilement repérables et modifiables plutôt que de chercher dans le code où sont vos noms de colonnes.

D) Création des lignes


Pour ajouter une ligne , cela se décompose en deux temps:

- Ajout de la ligne
- Remplissage des cellules

Chaque ligne peut être ajoutée par la commande

ColumnView1.Add(mykey,mytext,mypicture)

- mykey est une clef (KEY en Anglais)
- mytext est le texte affiché dans la cellule de la première colonne
- mypicture est l'image affichée si besoin dans la première colonne (l'image est optionnelle)

voici un exemple :

ColumnView1.Add("m","DUPOND")


Je n'ai pas mis d'image pour ne pas compliquer l'exemple.

Maintenant qu'une ligne est ajoutée, nous allons ajouter du texte dans les autre cellules.
Une Columnview n'est autre qu'une liste à 2 dimensions. Les lignes et les colonnes. Nous ecrivons donc :

ColumnView1["m"][1] = "Marcel"
ColumnView1["m"][2] = "2002-12-20"
ColumnView1["m"][3] = "0607080910"


Vous l'aurez compris, si je devais modifier la premiere cellule de cette ligne j'écrirais:

ColumnView1["m"][0] = "DURAND"


Créons rapidement 3 lignes pour notre exemple comme ceci :

ColumnView1.Add("m", "DUPOND")
ColumnView1.Add("n", "DURAND")
ColumnView1.Add("u", "DUMOULIN")
ColumnView1["m"][1] = "Marcel"
ColumnView1["m"][2] = "2020-01-05"
ColumnView1["m"][3] = "0607080910"
ColumnView1["n"][1] = "Jacques"
ColumnView1["n"][2] = "2021-12-09"
ColumnView1["n"][3] = "0504030201"
ColumnView1["u"][1] = "François"
ColumnView1["u"][2] = "2019-10-21"
ColumnView1["u"][3] = "0608090704"


E) Sélection d'une ligne à la souris


Pour sélectionner une ligne à la souris, il faut deux choses:

- La columnview doit réagir à l'évènement Click
- la KEY est renvoyée lors de ce clic.

Ajoutez l'évènement click comme ceci :

Public Sub ColumnView1_Click()
Print ColumnView1.Current.Key
End

Si vous exécutez votre application, lorsque vous cliquez sur une ligne, dans la console, m, n ou u est renvoyé.

Nous pouvons ainsi récupérer ce que nous voulons.
Exemple, je veux avoir le prénom de la deuxième ligne ,j'écris ce code  dans l'évènement click:

Print ColumnView1[ColumnView1.Current.Key][1]


F) Sélection de plusieurs lignes

Pour sélectionner plusieurs lignes il faut savoir deux choses :

- la propriété MODE de la ColumnView doit être à MULTIPLE
- les données renvoyées sont une liste de KEY.

Ainsi pour récupérer les KEY sélectionnées, je mets tout ça dans une boucle :

Public Sub ColumnView1_Click()
Dim b As Integer
For b = 0 To ColumnView1.Selection.Count - 1
Print ColumnView1.Selection[b]
Next
End


Vous l'aurez compris, si je veux récupérer les prénoms des lignes sélectionnées, j'écris :

 ColumnView1 [la ligne sélectionnée] [Colonne 1 des prénoms] comme  cet exemple :

Public Sub ColumnView1_Click()
Dim b As Integer
For b = 0 To ColumnView1.Selection.Count - 1
Print ColumnView1[ColumnView1.Selection[b]][1]
Next
End


Merci pour votre attention