Remplissage TreeView dynamique
Bonjour @ tous,
actuellement en plein développement d'une application Windows Forms en C#, celle-ci est reliée à une base de données SQL SERVER.
J'aimerais relier un Treeview à cette base de donnée.
J'aimerais savoir comment pouvoir relié dynamiquement ce treeview???
Cordialement, Abysse.
Remplir TreeView en utilisant Linq to Sql
1- Tu dois établir une connection entre l'appli et la base de données. Pour cela le mieux sera d'utiliser la technologie Linq to Sql qui permet de faire du mapping objet relationnel simple. (lien: création de classes LINQ to SQL).
2- Une fois que tu as généré le DataContext, tu peux maintenant exploiter le contenu de ta base.:)
3- Le but ce sera de remonter toutes les données en utilisant une jointure simple (Inner Join). Une fois les données récupérées, elles seront groupées pour prendre la forme d'un arbre.
4- Les données groupées seront intégrée facilement dans le control TreeView.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TreeView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//PopulateTreeView
PopulateTreeView();
}
/// <summary>
/// Allow you to retrieve data to display in TreeView
/// </summary>
private void PopulateTreeView()
{
//Create datacontext object
TreeViewContextDataContext ctx = new TreeViewContextDataContext();
//Using linq query to prepare data
var usines = (from usine in ctx.Ensemble_Usines
join s_usine in ctx.Sous_Ensemble_Usines
on usine.Id equals s_usine.Id_Ensemble_Usine
into JoinSusine
from s_usineJoin in JoinSusine.DefaultIfEmpty()
join partLib in ctx.Partie_Libelles
on s_usineJoin.Id equals partLib.Id_Sous_Ensemble_Usine
into JoinUsinXPartLib
from UsinXPartLib in JoinUsinXPartLib.DefaultIfEmpty()
join lib in ctx.Libelles
on UsinXPartLib.Id equals lib.Id_Partie_Libelle
into JoinPartLibLib
from usineNode in JoinPartLibLib.DefaultIfEmpty()
select new
{
Usine_Id = usine.Id,
Usine_Name = usine.Name,
S_usines = s_usineJoin,
PartUsines = UsinXPartLib,
PartLibXLib = usineNode
}).ToList();
//take position like tree
var treeGrouped = from l in usines
group l by l.Usine_Name into groupParentID
select new
{
Name = groupParentID.Key,
Items = from ens_us in groupParentID
where ens_us.S_usines != null
group ens_us by ens_us.S_usines.Name into sousEnsUsineGroup
select new
{
IdSousUsine = sousEnsUsineGroup.Key,
Items = from part_lib in sousEnsUsineGroup
where part_lib.PartUsines != null
group part_lib by part_lib.PartUsines.Name into groupPartLib
select new
{
NamePartLib = groupPartLib.Key,
Items = from li in groupPartLib
select li.PartLibXLib.Name
},
},
};
//Binding
TreeNode parentNode = null;
foreach (var usineParent in treeGrouped)
{
parentNode = new TreeNode(usineParent.Name);
foreach (var s_usine_node in usineParent.Items)
{
TreeNode usineChildNode = new TreeNode(s_usine_node.IdSousUsine.ToString());
foreach (var partLib in s_usine_node.Items)
{
TreeNode partLibNode = new TreeNode(partLib.NamePartLib);
foreach (var lib in partLib.Items)
{
TreeNode childLib = new TreeNode(lib.ToString());
partLibNode.Nodes.Add(childLib);
}
usineChildNode.Nodes.Add(partLibNode);
}
parentNode.Nodes.Add(usineChildNode);
}
parentNode.Collapse();
treeView1.Nodes.Add(parentNode);
}
}
}
} |
Exemple:
Ensemble_usine:
ID | nom
1 | Production
2 | Entretien
Sous_ensemble_usine:
ID | Name | id_ensemble
1 | SEU_Production1 | 1
2 | SEU_Entretien1 | 2
3 | SEU_Production2 | 1
4 | SEU_Entretien1 | 2
Partie_libelle:
ID | Name | id_sous_ensemble
1 | PL_1 | 1
2 | PL_2 | 2
Libelle :
ID | name | id_partie_libelle
1 | Libelle_1 | 1
2 | Libelle_2 | 2
et comme résultat :roll:
http://zepload.com/images/1286727590_Untitled.png
:ccool:
Fais moi savoir si tu as des commentaires.