Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Cách duyệt TreeView đa cấp trong C# như thế nào ?

  1. #1
    Ngày gia nhập
    05 2010
    Nơi ở
    Hà Lĩnh
    Bài viết
    25

    Mặc định Cách duyệt TreeView đa cấp trong C# như thế nào ?

    Mình có 1 treeview như thế này nhưng mới biết cách duyệt tới nút ở cấp thứ 2 ko biết duyệt nút ở cấp thứ 3. Ai biết chỉ mình với. Cảm ơn nhiều

    Đã được chỉnh sửa lần cuối bởi mu00013 : 12-11-2011 lúc 08:17 PM.

  2. #2
    Ngày gia nhập
    07 2010
    Bài viết
    138

    Của bạn đây
    Code:
    private void AddParentNode()
            {
                try
                {
                    List<Department> lstDepartment = departmentRepository.LoadParentNode(); //Danh sách nút gốc(không có cha)
                    treeDeparment.Nodes.Clear();
                    treeDeparment.BeginUpdate();
                    foreach (Department der in lstDepartment)
                    {
                        TreeNode node = new TreeNode();
                        node.Tag = der.ID;                    
                        node.Name = der.Description;                   
                        AddChidrenNode(ref node);
                        treeDeparment.Nodes.Add(node);
                    }
                    treeDeparment.EndUpdate();
                    treeDeparment.ExpandAll();
                }
                catch (Exception)
                {
    
                }
    
            }
            private void AddChidrenNode(ref TreeNode node)
            {
                try
                {
                    int parentID = (int)node.Tag;
                    List<Department> lstDepartment = departmentRepository.LoadChildrenNode(parentID);//Danh sách các nút con có ID của cha là parentID
                    foreach (Department der in lstDepartment)
                    {
                        TreeNode n = new TreeNode();
                        n.Tag = der.ID;                    
                        n.Name = der.Description;
                        AddChidrenNode(ref n);
                        node.Nodes.Add(n);
                    }
                }
                catch (Exception)
                {
    
                }
    
            }

  3. #3
    Ngày gia nhập
    05 2010
    Nơi ở
    Hà Lĩnh
    Bài viết
    25

    Trích dẫn Nguyên bản được gửi bởi leminh_005 Xem bài viết
    Của bạn đây
    Code:
    private void AddParentNode()
            {
                try
                {
                    List<Department> lstDepartment = departmentRepository.LoadParentNode(); //Danh sách nút gốc(không có cha)
                    treeDeparment.Nodes.Clear();
                    treeDeparment.BeginUpdate();
                    foreach (Department der in lstDepartment)
                    {
                        TreeNode node = new TreeNode();
                        node.Tag = der.ID;                    
                        node.Name = der.Description;                   
                        AddChidrenNode(ref node);
                        treeDeparment.Nodes.Add(node);
                    }
                    treeDeparment.EndUpdate();
                    treeDeparment.ExpandAll();
                }
                catch (Exception)
                {
    
                }
    
            }
            private void AddChidrenNode(ref TreeNode node)
            {
                try
                {
                    int parentID = (int)node.Tag;
                    List<Department> lstDepartment = departmentRepository.LoadChildrenNode(parentID);//Danh sách các nút con có ID của cha là parentID
                    foreach (Department der in lstDepartment)
                    {
                        TreeNode n = new TreeNode();
                        n.Tag = der.ID;                    
                        n.Name = der.Description;
                        AddChidrenNode(ref n);
                        node.Nodes.Add(n);
                    }
                }
                catch (Exception)
                {
    
                }
    
            }

    Ý mình là duyệt Node chứ ko phải add Node
    Giúp mình với

  4. #4
    Ngày gia nhập
    07 2010
    Bài viết
    138

    Ý bạn là duyệt để tìm kiếm node trên treeView hay chỉ là load dữ liệu theo mỗi lần click trên tree. Nếu là tìm kiếm thì bạn search trên mạng có nhiều mà. Nếu để load dữ liệu theo thì bạn có thể dùng Tag hoặc Name để truy vấn.

  5. #5
    Ngày gia nhập
    05 2010
    Nơi ở
    Hà Lĩnh
    Bài viết
    25

    Trích dẫn Nguyên bản được gửi bởi leminh_005 Xem bài viết
    Ý bạn là duyệt để tìm kiếm node trên treeView hay chỉ là load dữ liệu theo mỗi lần click trên tree. Nếu là tìm kiếm thì bạn search trên mạng có nhiều mà. Nếu để load dữ liệu theo thì bạn có thể dùng Tag hoặc Name để truy vấn.
    Ý mình là tìm kiếm Node
    Mình chỉ tìm kiếm dc ở Node ông và Node cha(ở đây là Danh sách các cuốn sách + hoặc 2 Node Thực hành 1 hoặc hệ điều hành)
    Còn ở Node cháu như quá trình hay bộ nhớ thì mình không duyệt tới dc
    Giúp mình với

  6. #6
    Ngày gia nhập
    07 2010
    Bài viết
    138

    Mặc định Cách duyệt TreeView đa cấp trong C# như thế nào ?

    Bạn tạo một textbox để nhập từ khóa tìm kiếm nhé
    Code:
    private void txtSearchDer_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == 13)
                {
                    ClearBackColor();
                    try
                    {
                        TreeNode[] tn = treeDeparment.Nodes.Find(txtSearchDer.Text, true);
                        if (tn.Length > 0)
                            for (int i = 0; i < tn.Length; i++)
                            {
                                treeDeparment.SelectedNode = tn[i];
                                treeDeparment.SelectedNode.BackColor = Color.Yellow;
                            }
                        else
                        {
                            string tag = string.Empty;
                            tag = treeDeparment.Text;
                            
                            if (tag != string.Empty)
                            {
                                TreeNodeCollection tnc;                           
                                tnc = treeDeparment.Nodes;
                                for (int i = 0; i < treeDeparment.Nodes[0].Nodes.Count; i++)                            
                                    if (tag == (string)tnc[i].Tag)
                                    {
                                        tnc[i].BackColor = Color.Red;
                                       
                                    }                           
                                
                            }
    
                        }
                    }
                    catch
                    {
    
                    }
    
                }
            }
    Đây là hàm tô màu và xóa màu
    Code:
           private void ClearBackColor()
            {
                TreeNodeCollection nodes = treeDeparment.Nodes;
                foreach (TreeNode n in nodes)
                {
                    ClearRecursive(n);
                }
            }
    
            
            private void ClearRecursive(TreeNode treeNode)
            {
                foreach (TreeNode tn in treeNode.Nodes)
                {
                    tn.BackColor = Color.White;
                    ClearRecursive(tn);
                }
            }
    Bạn nên tạo các images(selectImageIndex và ImageIndex) cho Node để dễ phân biệt Node nào đang được chọn

  7. #7
    Ngày gia nhập
    05 2011
    Bài viết
    30

    Mấy đoạn code này hy vọng giúp được bạn. Bạn phải expand hết các nhánh của cây thì mới lấy được danh sách của nó.
    Code:
       //dệ quy duyệt lấy từ node được chọn ngược đến node root 
            ArrayList getNodetoRoot(TreeNode node)
            {
                ArrayList list = new ArrayList();
                v_getNodetoRoot(node, list);
                return list;
            }
            private void v_getNodetoRoot(TreeNode node, ArrayList list)
            {
                list.Add(node.Text);
                if (node.Parent != null)      
                {
                    v_getNodetoRoot(node.Parent, list);
                }
            }
    Code:
     private void tvwTuyen_AfterExpand(object sender, TreeViewEventArgs e)
            {         
               //lấy đệ quy các thiết bị còn lại         
                    foreach (TreeNode node in e.Node.Nodes)
                    {
                        cls_TramTuyen.getTo_tvwThietBiDongCat(node, Convert.ToString(node.Tag), (node.Nodes.Count == 0));
    
                    }       
            }
     public void getTo_tvwThietBiDongCat(TreeNode parentNode, string id, bool reload)
          {
              if (!reload)
              {
                  return;//nếu node chọn là node đã expand rồi thì không gọi đệ quy nữa
              }
              else
              {
                  try
                  {
                      var selectThietBi = dbTramTuyen.getRecursiveThietBiDongCat(id).ToList();
                      if (selectThietBi.Count == 0) return;
                      foreach (ThietBiDongCat thietbi in selectThietBi)
                      {
                          TreeNode node = new TreeNode();
                          node.Text = thietbi.TenThietBi.ToString();
                          node.Tag = thietbi.idThietBiDongCat.ToString();
                          parentNode.Nodes.Add(node);
                          ///add danh sach node vào list, đoạn này mình chưa test, add thêm theo yêu cầu của bạn thôi, đệ quy lấy node nó cũng hao hao đoạn code getNodetoRoot() ở trên thôi                      
                          list.Add(node);
                          ///
                      }
                      //dệ quy các phân đoạn  tiếp theo
                      foreach (TreeNode childNode in parentNode.Nodes)
                      {
                          getTo_tvwThietBiDongCat(childNode, childNode.Tag.ToString(), reload);
                      }
                  }
                  catch (Exception ex)
                  {
                      cls_Message.Error(ex.Message);
                  }
              }
          }
    //LINQ
     public IEnumerable<ThietBiDongCat> getRecursiveThietBiDongCat(string id)
           {
               return from pd in this.ThietBiDongCats
                      where pd.idThietBiCha == Convert.ToInt16(id)
                      select pd;
           }

Các đề tài tương tự

  1. Định dạng treeview trong ASP.NET như thế nào?
    Gửi bởi vinhson trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 1
    Bài viết cuối: 02-05-2014, 05:18 PM
  2. Làm thế nào để load các Panel khi chọn node trên TreeView trong C#?
    Gửi bởi qhhqnavy trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 31-05-2011, 08:33 AM
  3. Làm thế nào để xác định giữa Parent và Child node trong TreeView?
    Gửi bởi hotanvu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 15-01-2011, 08:06 PM
  4. tạo treeview trong flexgrid như thế nào?
    Gửi bởi wkiamiuemth trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 16-11-2010, 05:32 PM
  5. Duyệt toàn bộ node treeview sang listview
    Gửi bởi xuyenxp89 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 15-09-2010, 08:14 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn