最近实在没有写过什么代码,好像c#都忘记了一样,sigh
       // Create a new ArrayList to hold the Customer objects.
        private ArrayList customerArray = new ArrayList();

        private void FillMyTreeView()
        {
            // Add customers to the ArrayList of Customer objects.
            for(int x=0; x<10; x++)
            {
                customerArray.Add(new Customer("Customer" + x.ToString()));
            }

            // Add orders to each Customer object in the ArrayList.
            foreach(Customer customer1 in customerArray)
            {
                for(int y=0; y<5; y++)
                {
                    customer1.CustomerOrders.Add(new Order("Order" + y.ToString()));    
                }
            }

            // Display a wait cursor while the TreeNodes are being created.
            Cursor.Current =Cursors.WaitCursor ;
        
            // Suppress repainting the TreeView until all the objects have been created.
            treeView1.BeginUpdate();

            // Clear the TreeView each time the method is called.
            treeView1.Nodes.Clear();

            // Add a root TreeNode for each Customer object in the ArrayList.
            foreach(Customer customer2 in customerArray)
            {
                treeView1.Nodes.Add(new TreeNode(customer2.CustomerName));
               
         
                // Add a child treenode for each Order object in the current Customer object.
                foreach(Order order1 in customer2.CustomerOrders)
                {
                    treeView1.Nodes[customerArray.IndexOf(customer2)].Nodes.Add(
                        new TreeNode(customer2.CustomerName + "." + order1.OrderID));
                }
            }

            // Reset the cursor to the default for all controls.
            Cursor.Current = Cursors.Default;

            // Begin repainting the TreeView.
            treeView1.EndUpdate();
        }

        private void treeView1_AfterCheck_1(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            //MessageBox.Show(e.Node.Text.ToString());
            // The code only executes if the user caused the checked state to change.
            if(e.Action != TreeViewAction.Unknown)
            {
                if(e.Node.Nodes.Count > 0)
                {
                    /* Calls the CheckAllChildNodes method, passing in the current
                    Checked value of the TreeNode whose checked state changed. */
                    this.CheckAllChildNodes(e.Node, e.Node.Checked);
                }
            }


        }

        private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
        {
            foreach(TreeNode node in treeNode.Nodes)
            {
                node.Checked = nodeChecked;
                if(node.Nodes.Count > 0)
                {
                    // If the current node has child nodes, call the CheckAllChildsNodes method recursively.
                    this.CheckAllChildNodes(node, nodeChecked);
                }
            }
        }



    }

      public class Customer
    {
        public Customer(String name)
        {
            this.customerName = name;
            this.customerOrders = new ArrayList();
        }
        public String CustomerName
        { 
            set
            {
                customerName = value;
            }
            get
            {
                return customerName;
            }
        }
        public ArrayList CustomerOrders
        {
            set
            {
                customerOrders = value;
            }
            get
            {
                return customerOrders;
            }
        }

        private String customerName;
        private ArrayList customerOrders;
    }

    public class Order
    {
        public Order(String src)
        {
            this.orderID = src;
        }
        public String OrderID
        {
            set
            {
                orderID = value;
            }
            get
            {
                return orderID;
            }
        }

        private String orderID;
    }

基本上用msdn里面改的。。。