Bonjour à tous,

Cela fait un petit moment que je me bats avec le peuplement d'un TreeView depuis une DataTable, j'espère que vous pourrez m'aider à avancer.

Au Load de mon Form, j'effectue une requête sur une base de données SQL, dont je balance le résultat dans une DataTable, jusque là pas de souci. Le résultat de la requête est le suivant :



Je dois ensuite afficher tout ça dans mon Form par l'intermédiaire d'un TreeView. Je souhaite obtenir ceci :



Et tout ce que je parviens à obtenir, c'est au mieux cela :



Le bout de code concerné que j'ai commencé à écrire est le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
private void Form1_Load(object sender, EventArgs e)
{
	// Connexion à la base de données
 
	SqlConnection maConnexion = new SqlConnection("Data Source=(local);Initial Catalog=maBase;Integrated Security=True");
	maConnexion.Open();
	SqlDataAdapter monAdapter = new SqlDataAdapter();
	monAdapter.SelectCommand = new SqlCommand("SELECT NOMPROJET, CONSTITUER.CYCLEVIE, NOMLOT, IDINTERV FROM PROJET JOIN CONSTITUER ON PROJET.CODEPROJET = CONSTITUER.CODEPROJET AND PROJET.CODEPROJET = 3 LEFT JOIN LOT ON PROJET.CODEPROJET = LOT.CODEPROJET AND LOT.CYCLEVIE = CONSTITUER.CYCLEVIE AND PROJET.CODEPROJET = 3 LEFT JOIN INTERVENTION ON INTERVENTION.CODEPROJET = PROJET.CODEPROJET AND LOT.IDLOT = INTERVENTION.IDLOT AND PROJET.CODEPROJET = 3", maConnexion);
 
	// Importation du résultat de la requête dans la DataTable
 
	DataTable maTable = new DataTable();
	monAdapter.Fill(maTable);
	maConnexion.Close();	
 
	// Début du traitement du TreeView et création du noeud racine
 
	treeView.BeginUpdate();
	treeView.Nodes.Clear();
        DataRow maRow = maTable.Rows[0];
	TreeNode nodeProjet = new TreeNode(maRow["PROJET"].ToString());
	treeView.Nodes.Add(nodeProjet);
 
	// Début des problèmes...
 
	Int32 n = 0;
	foreach (DataRow dr in maTable.Rows)
	{
		treeView.Nodes[0].Nodes.Add(dr[1].ToString());
		if (dr[2].ToString() != "")
		{
			treeView.Nodes[0].Nodes[n].Nodes.Add(dr[2].ToString());
		}
		if (dr[3].ToString() != "")
		{
			treeView.Nodes[0].Nodes[n].Nodes[0].Nodes.Add(dr[3].ToString());
		}
		n++;
	}
	treeView.EndUpdate();
	treeView.ExpandAll();
}
Y aurait-il donc une solution pour éviter dans mon TreeView la redondance des noeuds ?

Merci par avance pour votre aide...