OVH Cloud OVH Cloud

Methode pour treeview

2 réponses
Avatar
Frederix
Bonjour,
je debute et j'arrive a charger un treeview a partir d'un dataset ( en
iterant).
mais maintenant je voudrais connaitre l'ID de l'enregistrement selectionné
dans le treeview, et je sais pas comment faire.
Est-ce possible d'avoir une piste.
merci d'avance les pros

Fred

2 réponses

Avatar
Bull
Bonsoir Frederix,

Le plus simple est d'enregistrer un objet (par ex. ton id) dans le node.tag

Tu peux y mettre aussi bien un integer, qu'un objet d'une classe plus
complexe.

--
Cordialement,
Bull

Frederix a écrit :
Bonjour,
je debute et j'arrive a charger un treeview a partir d'un dataset ( en
iterant).
mais maintenant je voudrais connaitre l'ID de l'enregistrement selectionné
dans le treeview, et je sais pas comment faire.
Est-ce possible d'avoir une piste.
merci d'avance les pros

Fred




Avatar
Zoury
Salut ! :O)

Le plus simple est d'enregistrer un objet (par ex. ton id) dans le


node.tag

Tu peux y mettre aussi bien un integer, qu'un objet d'une classe plus
complexe.



Voici un exemple qui conserve le DataRow de l'enregistrement dans le Tag du
noeud (désolé pour les longues lignes). Tu n'as qu'à ouvrir un nouveau
projet de type "Application Windows" et y coller le code suivant :
'***
Option Explicit On

Imports System.Data

Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Code généré par le Concepteur Windows Form "

Public Sub New()
MyBase.New()

'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()

'Ajoutez une initialisation quelconque après l'appel
InitializeComponent()

End Sub

'La méthode substituée Dispose du formulaire pour nettoyer la liste des
composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer

'REMARQUE : la procédure suivante est requise par le Concepteur Windows
Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents TreeView1 As System.Windows.Forms.TreeView
Friend WithEvents Label1 As System.Windows.Forms.Label
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.TreeView1 = New System.Windows.Forms.TreeView
Me.Label1 = New System.Windows.Forms.Label
Me.SuspendLayout()
'
'TreeView1
'
Me.TreeView1.ImageIndex = -1
Me.TreeView1.Location = New System.Drawing.Point(8, 8)
Me.TreeView1.Name = "TreeView1"
Me.TreeView1.SelectedImageIndex = -1
Me.TreeView1.Size = New System.Drawing.Size(376, 304)
Me.TreeView1.TabIndex = 0
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(8, 320)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(376, 128)
Me.Label1.TabIndex = 1
Me.Label1.Text = "Label1"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(392, 454)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.TreeView1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Dim ds As DataSet

ds = CreerDataSet()
RemplirDataSet(ds)
RemplirTreeView(ds)

End Sub

Private Sub RemplirTreeView(ByVal ds As DataSet)

Dim dr1 As DataRow
Dim dr2 As DataRow
Dim tn As TreeNode

For Each dr1 In ds.Tables("COMPAGNIE").Rows

' ajoute la compagnie
' on garde une référence vers le datarow dans le tag
tn = TreeView1.Nodes.Add(DirectCast(dr1("VILLE"), String))
tn.Tag = dr1

' on ajoute les employés
For Each dr2 In
ds.Tables("EMPLOYE").Select(String.Format("COMPAGNIE_ID = {0}", dr1("ID")))

' ajoute l'employe, on garde une référence vers le datarow
dans le tag
tn.Nodes.Add(String.Format("{0} {1}", dr2("PRENOM"),
dr2("NOM"))).Tag = dr2

Next

Next

End Sub

Private Sub RemplirDataSet(ByVal ds As DataSet)

Dim dt As DataTable

' créer des entrepôts
dt = ds.Tables("COMPAGNIE")
dt.Rows.Add(New Object() {1, "Québec"})
dt.Rows.Add(New Object() {2, "Montréal"})
dt.Rows.Add(New Object() {3, "Trois-Rivière"})

' créer des produits
dt = ds.Tables("EMPLOYE")
' liste des produits à québec
dt.Rows.Add(New Object() {1, 1, "Yanick", "Lefebvre", New
DateTime(2005, 3, 12)})
dt.Rows.Add(New Object() {2, 1, "Patrice", "Lamarche", New
DateTime(2000, 10, 5)})
dt.Rows.Add(New Object() {3, 1, "Marie", "Beaudry", New
DateTime(2001, 7, 27)})
dt.Rows.Add(New Object() {4, 1, "Annie", "Roche", New DateTime(1998,
7, 12)})
dt.Rows.Add(New Object() {5, 1, "Martin", "Nourcy", New
DateTime(1993, 4, 18)})
' liste des produits à montréal
dt.Rows.Add(New Object() {6, 2, "Simon", "Martin", New
DateTime(1996, 8, 14)})
dt.Rows.Add(New Object() {7, 2, "Nicolas", "Moore", New
DateTime(1992, 3, 12)})
dt.Rows.Add(New Object() {8, 2, "Pierre", "Lafleur", New
DateTime(2003, 4, 6)})
dt.Rows.Add(New Object() {9, 2, "Steeve", "Papineau", New
DateTime(2004, 1, 6)})
dt.Rows.Add(New Object() {10, 2, "Dominique", "Larouche", New
DateTime(1999, 11, 17)})
dt.Rows.Add(New Object() {11, 2, "Michel", "Grégoire", New
DateTime(1978, 1, 5)})
' liste des produits à Trois-Rivières
dt.Rows.Add(New Object() {12, 3, "Claude", "Tremblay", New
DateTime(1995, 12, 26)})
dt.Rows.Add(New Object() {13, 3, "Annie", "Lamarre", New
DateTime(2001, 6, 15)})
dt.Rows.Add(New Object() {14, 3, "Rosaire", "Dubuc", New
DateTime(1934, 3, 9)})

End Sub

Private Function CreerDataSet() As DataSet

Dim ds As DataSet

ds = New DataSet

ds.Tables.Add(CreerTableCatalogue())
ds.Tables.Add(CreerTableProduit())

ds.Relations.Add(ds.Tables("COMPAGNIE").Columns("ID"),
ds.Tables("EMPLOYE").Columns("COMPAGNIE_ID"))

Return ds

End Function

Private Function CreerTableCatalogue() As DataTable

Dim dt As DataTable

dt = New DataTable("COMPAGNIE")

dt.Columns.Add("ID", GetType(Int32))
dt.Columns.Add("VILLE", GetType(String))

dt.PrimaryKey = New DataColumn() {dt.Columns("ID")}

Return dt

End Function

Private Function CreerTableProduit() As DataTable

Dim dt As DataTable

dt = New DataTable("EMPLOYE")

dt.Columns.Add("ID", GetType(Int32))
dt.Columns.Add("COMPAGNIE_ID", GetType(Int32))
dt.Columns.Add("NOM", GetType(String))
dt.Columns.Add("PRENOM", GetType(String))
dt.Columns.Add("DATE_EMBAUCHE", GetType(DateTime))

dt.PrimaryKey = New DataColumn() {dt.Columns("ID")}

Return dt

End Function

Private Sub TreeView1_AfterSelect(ByVal sender As Object, ByVal e As
System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect

Dim dr As DataRow
dr = DirectCast(e.Node.Tag, DataRow)

Select Case dr.Table.TableName
Case "COMPAGNIE"
Label1.Text = String.Format("Compagnie ID : {0}{1}Ville :
{2}", dr("ID"), vbNewLine, dr("VILLE"))
Case "EMPLOYE"
Label1.Text = String.Format("Employé ID : {0}{1}Nom : {2}
{3}{1}Date d'embauche : {4}", dr("ID"), vbNewLine, dr("NOM"), dr("PRENOM"),
CType(dr("DATE_EMBAUCHE"), DateTime).ToLongDateString())
End Select

End Sub

End Class
'***
--
Cordialement
Yanick
MVP pour Visual Basic