private void button1_Click(object sender, EventArgs e) { string query = @"SELECT Customers.ContactName AS Expr1, Orders.OrderDate, Products.ProductName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID INNER JOIN Products ON [Order Details].ProductID = Products.ProductID ORDER BY Customers.ContactName, Orders.OrderDate, Products.ProductName"; SqlConnection con = new SqlConnection("data source=(local);initial catalog=Northwind;Integrated Security='SSPI'"); con.Open(); SqlCommand command = new SqlCommand(query, con); SqlDataReader reader = command.ExecuteReader(); DateTime orderDate=DateTime.MinValue; // le noeud de base TreeNode rootNode=new TreeNode("Liste des ommandes"); treeView1.Nodes.Add(rootNode); while (reader.Read()) { // le noeud de travail client TreeNode CustomerNode = null; //Le noeud de travail Date TreeNode OrderDateNode = null; //nouveau client ? on l'ajoute au noeud de base if (CustomerNode == null || CustomerNode.Text != reader.GetString(0)) { CustomerNode=new TreeNode(reader.GetString(0)); rootNode.Nodes.Add(CustomerNode); } //nouvelle date de commande ? on l'ajoute au client en cours if (OrderDateNode == null || OrderDateNode.Text !=reader.GetDateTime(1).ToString("yyyy/MM/dd")) { OrderDateNode=new TreeNode(reader.GetDateTime(1).ToString("yyyy/MM/dd")); CustomerNode.Nodes.Add(OrderDateNode); } //ajout des articles à la date de commande en cours OrderDateNode.Nodes.Add(new TreeNode(reader.GetString(2))); } }