GB3-Retrouver les clefs d'index d'une columnview

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

1- Hypothèse:

Je souhaite créer une application avec une columnview qui comporte une colonne et 150 lignes.
Vous savez qu'une clef 'KEY' est de type String. Pour notre problème nous allons définir des clef alléatoires.
Ceci nous forcera à utiliser les pointeurs.

2- Création de la columnview


Public Sub Form_Open()
Dim a As Integer
Dim b As String
cv.Columns.Count = 1
cv.Columns[0].Width = 100
For a = 0 To 149
  b = Str(a) & "-" & Str(Rnd(1, 15000))
    cv.Add(b, "text: " & a)
Next
End


Détaillons le code :

cv.Columns.Count = 1 : Je veux une seule colonne
cv.Columns[0].Width = 100  : La largeur de la prmière colonne (soit 0) est de 100 pixels

Maintenant nous allons remplir les 150 lignes par ce code :

For a = 0 To 149
  b = Str(a) & "-" & Str(Rnd(1, 15000))
    cv.Add(b, "text: " & a) 'j'appelle la columnview cv, c'est plus facile à écrire et plus rapide
Next

Pour notre exemple, je crée une clef aléatoire qui est de la forme : ID-randomnumber

b = Str(a) & "-" & Str(Rnd(1, 15000))


Str()
converti un nombre en chaine string
Rnd(1,15000) génère un nombre alléatoire  entre 1.0 et 15000.0.

3- Utilisation des pointeurs.

Ne connaissant pas du tout les clefs générées, il 'est impossible de sélectionner la ligne 38 par exemple.
Comment puis-je faire ?
Il faut définir ce qu'on appelle un pointeur. c'est tout simplement le numéro de la ligne qu'on souhaite sélectionner.

Ainsi si je veux connaitre la clef de la ligne 38, voici comment je peux faire.

Dim a As Integer
cv.MoveFirst() ' je mets le pointeur à la ligne 0
For a = 0 To 37
  cv.MoveNext()
Next
 tkey.Text = cv.Item.Key 'voici le resultat de la 37eme ligne à la 38eme position

 Enfin il si je veux sélectionner cette ligne 'c'est à dire la mettre en surbrillance) j'ai juste à écrire :
 
cv.Item.Selected = 37


4- Evènement Click de la columnview.

Lors d'un clic ,je souhaite afficher la clef de la ligne cliquée dans une textbox appelée tkey

Public Sub cv_Click()
tkey.Text = cv.Current.Key 'renovoi la clef courante c'est à dire la ligne sélectionnée
End


5- Utilisation du Spinbox

Voici un widget intéressant au passage que nous pourrions utiliser dans notre application.

il est composé d'une valuebox et deux boutons + et -.
Nous définissons la valeur max dans les propriétés à 149
Ensuite nous écrivons ce code :


Public Sub spointer_Change()
Dim a As Integer
cv.MoveFirst() 'se place à la ligne 0
For a = 0 To (spointer.Value - 1)
  cv.MoveNext() 'déplace toi d'un cran
  tkey.Text = cv.Item.Key 'affiche la clef dans la boite tkey
Next
cv.Item.Selected = spointer.Value 'séectionne la ligne pointée par le pointeur.
End

Si je traduis explicitement , cela veut dire :
Va au début et passe dans une boucle FOR NEXT jusqu'à arriver à la valeur du spinbox moins un.


6- Deux autres solutions de Bruces.


Je vous mets les solutions pour le fun :

For Each sKey As String In ColumnView1.Keys
  Print sKey
Next

Conclusion :

J'ai cherché depuis un long moment comment faire et Gianluigi m'a aidé, un grand merci à lui.
ciao.