Text Link Text Link: truyen tranh 18 | Tin Game | Tin Xe | Tin Làm Đẹp | w88 | 188 | 188bet | truyen tranh adult | https://bossnhacai.com/ | 333666 | tải sunwin | mb66
Kết quả 1 đến 1 của 1

Chủ đề: [C#] Tạo cây phân cấp nhưng không giới hạn về số cấp

  1. #1
    Ngày tham gia
    Jun 2007
    Tuổi
    38
    Bài viết
    4,992
    Cám ơn
    1,513
    Được cám ơn 8,218 trong 1,927 bài viết
    Mức độ nổi tiếng
    1827

    Smile [C#] Tạo cây phân cấp nhưng không giới hạn về số cấp

    Tôi có 1 bảng như sau:
    ID Name ParentID
    1 A 0
    2 B 0
    3 A1 1
    4 A11 3
    5 B1 2
    6 B2 2

    và số cấp dc lặp không hạn chế!

    Giờ tôi muốn hỏi cách làm thế nào để đưa dữ liệu trên về dạng:
    A
    - A1
    - - A11
    B
    - B1
    - B2


    Trả lời:

    Tôi tạo 1 TreeView (có tên là TreeView1) trong Winform, sau đó khởi tạo 1 DataTable để chứa dữ liệu mẫu.
    Mời bạn xem qua đoạn code sau:




    using System;
    using System.Data;
    using System.Windows.Forms;
    using System.Collections;

    namespace TreeExample
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private readonly ArrayList totalNodes = new ArrayList();
    private void GetNodes(TreeNode node)
    {
    if (node.Nodes.Count > 0)
    {
    foreach (TreeNode childNode in node.Nodes)
    {
    AddNode(node);
    GetNodes(childNode);
    }
    }
    else
    {
    AddNode(node);
    }
    }

    private void GetTreeNodes(TreeView treeView)
    {
    this.totalNodes.Clear();
    foreach (TreeNode node in treeView.Nodes)
    {
    GetNodes(node);
    }
    }

    private void AddNode(TreeNode node)
    {
    bool isExist = false;
    foreach (TreeNode treeNode in this.totalNodes)
    {
    if (treeNode.Tag.ToString() == node.Tag.ToString())
    {
    isExist = true;
    break;
    }
    }
    if (isExist == false)
    {
    this.totalNodes.Add(node);
    }
    }

    public void PopulateTreeView(DataTable dt, ref TreeView treeView)
    {
    DataRowCollection list = dt.Rows;
    ArrayList L = new ArrayList();
    ArrayList L1 = new ArrayList();
    ArrayList L2 = new ArrayList();

    foreach (DataRow r in list)
    {
    L.Add(r);
    L1.Add(r);
    }

    foreach (DataRow r in L)
    {
    if (Convert.ToInt32(r["ParentID"]) == 0)
    {
    L2.Add(r);
    TreeNode node1 = new TreeNode();
    node1.Text = r["Title"].ToString();
    node1.Tag = r["ID"].ToString();

    treeView.Nodes.Add(node1);
    L1.Remove(r);
    }
    }
    Begin:
    while (L1.Count > 0)
    {
    foreach (DataRow r2 in L2)
    {
    foreach (DataRow r1 in L1)
    {
    if (Convert.ToInt32(r1["ParentID"]) == Convert.ToInt32(r2["ID"]))
    {
    GetTreeNodes(treeView);
    foreach (TreeNode node in totalNodes)
    {
    if (node.Tag.ToString() == r1["ParentID"].ToString())
    {
    TreeNode node2 = new TreeNode();
    node2.Text = r1["Title"].ToString();
    node2.Tag = r1["ID"].ToString();
    node.Nodes.Add(node2);
    }
    }
    L2.Add(r1);
    L1.Remove(r1);
    goto Begin;
    }
    }
    }
    }
    }


    private void Form1_Load(object sender, EventArgs e)
    {
    // Khởi tạo DataTable (hoặc có thể lấy từ database).
    DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof(int));
    dt.Columns.Add("Title", typeof(string));
    dt.Columns.Add("ParentID", typeof(int));

    DataRow row = dt.NewRow();
    row["ID"] = 1;
    row["Title"] = "Trang chủ";
    row["ParentID"] = 0;
    dt.Rows.Add(row);
    //
    row = dt.NewRow();
    row["ID"] = 12;
    row["Title"] = "Quản trị";
    row["ParentID"] = 0;
    dt.Rows.Add(row);
    //
    row = dt.NewRow();
    row["ID"] = 3;
    row["Title"] = "Quản trị nội dung";
    row["ParentID"] = 12;
    dt.Rows.Add(row);
    //
    row = dt.NewRow();
    row["ID"] = 9;
    row["Title"] = "Thư viện";
    row["ParentID"] = 0;
    dt.Rows.Add(row);
    //
    row = dt.NewRow();
    row["ID"] = 65;
    row["Title"] = "Download";
    row["ParentID"] = 9;
    dt.Rows.Add(row);
    //
    row = dt.NewRow();
    row["ID"] = 40;
    row["Title"] = "Quản trị văn bản";
    row["ParentID"] = 3;
    dt.Rows.Add(row);
    //
    row = dt.NewRow();
    row["ID"] = 400;
    row["Title"] = "Quản trị tài chính";
    row["ParentID"] = 12;
    dt.Rows.Add(row);

    PopulateTreeView(dt, ref treeView1);
    }
    }
    }

    *Add Friend Facebook để giao lưu nhé các bạn: https://www.facebook.com/tuanduong85
    *Bán Point VIP Fshare giá rẻ Uy tín, chất lượng: http://4r.ketnoitatca.net/showthread...ketnoitatcanet
    *KNTC Youtube: https://www.youtube.com/channel/UCaz...-L_j9UREnNxqAg
    *KNTC Facebook: https://www.facebook.com/ketnoitatca
    *KNTC Twitter: https://twitter.com/ketnoitatca

  2. Những thành viên gởi lời cám ơn đến TuấnDương vì bài viết hữu ít này:

    bicbabolv (26-07-2011)

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  

Quảng Cáo

RSS 2.0 XML MAP