Thêm Node và ChildNode vào TreeView trong C#

Góc Kinh Nghiệm sẽ trình bày cách hiển thị một danh sách các thiết bị trên treeview, tương ứng với mỗi thiết bị thì nó thuộc từng loại thiết bị nhất định
Treeview sẽ gồm 3 cấp:

  • Cấp 1: chứa 1 node gốc duy nhất
  • Cấp 2: chứa thông tin loại thiết bị (thuộc node gốc)
  • Cấp 3: chứa thông tin thiết bị (thuộc node loại thiết bị)

Giả sử, chương trình có các biến sau:

  • TreeView tên trvDevice
  • ImageList tên imgList
  • Các ảnh “Root.png”, “Device.png” và “KindOfDevice.png” được đặt sẵn trong ổ D:\
  • Danh sách loại thiết bị, và 2 danh sách thiết bị thuộc 2 loại thiết bị đầu tiên

Chú ý: 3 cấp trên TreeView sẽ được hiển thị bởi 3 icon tương ứng trong ImageList


Ví dụ minh họa được viết trên VS2005:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace MyProject.TreeView
{
   public partial class FormDemoTreeView : Form
   {
      public FormDemoTreeView()
      {
         InitializeComponent();
         InitData();
      }

      private void InitData()
      {
         // Hiển thị checkbox cho các node
         trvDevice.CheckBoxes = true;
         // Khởi tạo danh sách các ảnh làm icon
         ImageList imgList = new ImageList();
         imgList.Images.Add(Image.FromFile("D:/Root.png"));
         imgList.Images.Add(Image.FromFile("D:/Device.png"));
         imgList.Images.Add(Image.FromFile("D:/KindOfDevice.png"));

         trvDevice.ImageList = imgList;
      }

      private void FormDemoTreeView_Load(object sender, EventArgs e)
      {
         trvDevice.Nodes.Clear();
         // Loại thiết bị
         string[] kindOfDevice = { "Laptop", "Điện thoại", "Máy quạt", "Tủ Lạnh" };
         // Thiết bị thuộc loại thiết bị Laptop và Điện thoại
         string[] deviceOfLaptop = { "Accer 125", "HP CQ24", "Toshiba G34" };
         string[] deviceOfPhone = { "Samsung 353344", "Nokia N97" };

         // Node gốc đầu tiên
         TreeNode rootNode = new TreeNode("Danh sách thiết bị");
         rootNode.ImageIndex = 0; // Lấy hình thứ nhất trong ImageList (hình "Root.png")
         rootNode.Expand();
         //
         for (int i = 0; i < kindOfDevice.Length; i++)
         {
            TreeNode childNode = new TreeNode(kindOfDevice[i].ToUpper());
            childNode.ImageIndex = 1; // Lấy hình thứ 2 trong ImageList (hình "Device.png")
            childNode.Expand();
            if (i == 0)
            {
               AddChildNode(childNode, deviceOfLaptop);
            }
            else if (i == 1)
            {
               AddChildNode(childNode, deviceOfPhone);
            }
            rootNode.Nodes.Add(childNode);
         }
         this.trvDevice.Nodes.Add(rootNode);
      }

      private void AddChildNode(TreeNode pParentNode, string[] pNodesList)
      {
         if (pNodesList == null)
            return;
         for (int i = 0; i < pNodesList.Length; i++)
         {
            TreeNode childNode = new TreeNode(pNodesList[i]);
            childNode.Expand();
            childNode.ImageIndex = 2; // Lấy hình cuối cùng trong ImageList (hình "KindOfDevice.png")
            pParentNode.Nodes.Add(childNode);
         }
      }
   }
}

Chạy chương trình, Góc Kinh Nghiệm thu được kết quả như hình bên dưới:

Góc Kinh Nghiệm chúc các bạn thành công :roll:


4 comments

    1. À! em quên mất không gọi thủ tục: initData();
      Hihi, cảm ơn tác giả nhiều nha!

  1. cho em hỏi hiện tại em cho treeview nó load 1 folder từ ngoài ổ đĩa của máy. xong giờ em muốn add 1 node bất kỳ vào trong treeview mà trong folder ở ngoài ổ đĩa cũng có folder tương tự thì làm sao vậy?…rất mong chỉ giáo

Leave a Reply

Your email address will not be published. Required fields are marked *