2009-05-19 94 views
13

Tôi mới vào C# và không có bất kỳ trải nghiệm lập trình nào. Nhưng tôi đã hoàn thành một C# cơ bản. Bây giờ tôi muốn thiết kế một khung nhìn cây đơn giản bằng cách thêm nút cha và nút con.thêm các nút con trong treeview

Tôi muốn thêm đứa con thứ hai cho nút Thứ hai, tôi khá kẹt ở đây và không biết điều gì sẽ xảy ra tiếp theo.

Bất kỳ ý tưởng nào?

Đây là mã:

private void addParentNode_Click(object sender, EventArgs e) 
    { 
     string yourParentNode; 
     yourParentNode = textBox1.Text.Trim(); 
     treeView2.Nodes.Add(yourParentNode); 
    } 

    private void addChildNode_Click(object sender, EventArgs e) 
    { 
     string yourChildNode; 
     yourChildNode = textBox1.Text.Trim(); 
     treeView2.Nodes[0].Nodes.Add(yourChildNode); 
    } 

Xin lỗi tôi đã không rõ ràng, tôi không chắc chắn nếu tôi thực sự cần cái này đây:

//treeView1.BeginUpdate(); 
    //treeView1.Nodes.Clear(); 

Những gì tôi đang cố gắng để làm , là thêm các nút cha và nút con. Trong mã của tôi, tôi có thể thêm một số nút cha mẹ, nhưng nếu tôi muốn thêm một nút con, nó chỉ thêm vào nút cha đầu tiên. Tôi muốn rằng nếu tôi thêm một nút con, tôi muốn thêm nó vào cha mẹ thứ hai hoặc cha mẹ thứ ba.

Trong mã của tôi, tôi chỉ sử dụng một treeview ở đây mà tên như treeview2 Đây là screenshot

đây là cách mã cuối cùng của tôi trông giống như: Trước khi tôi đặt khác, tôi nhận được một lỗi nếu tôi không chọn gì cả. Vì vậy, tôi đã làm theo cách đó nếu không có gì được chọn, nó sẽ thêm "nút con" vào "nút mặc định" hoặc (nút parent1). Dường như nó hoạt động tốt. Thanks guys ;-)

//This is for adding a parent node 
    private void addParentNode_Click(object sender, EventArgs e) 
    { 
     treeView2.BeginUpdate(); 

     string yourParentNode; 
     yourParentNode = textBox1.Text.Trim(); 
     treeView2.Nodes.Add(yourParentNode); 
     treeView2.EndUpdate(); 
    } 

    //This is for adding child node 
    private void addChildNode_Click(object sender, EventArgs e) 
    { 
     if (treeView2.SelectedNode != null) 
     { 
      string yourChildNode; 
      yourChildNode = textBox1.Text.Trim(); 

      treeView2.SelectedNode.Nodes.Add(yourChildNode); 
      treeView2.ExpandAll(); 
     } 
     //This is for adding the child node to the default node(parent 1 node) 
     else 
     { 
      string yourChildNode; 
      yourChildNode = textBox1.Text.Trim(); 
      treeView2.Nodes[0].Nodes.Add(yourChildNode); 
     } 

Câu hỏi bổ sung: Có cách nào khác về cách mã tốt hơn không? Bởi vì ở đây, tôi khai báo chuỗi "yourChildNode" hai lần. Một trong các if và khác trong khác, có bất kỳ đơn giản hóa?

+0

Hơi khó hiểu những gì bạn đang cố gắng làm ở đây. Bạn dường như có 2 điều khiển chế độ xem dạng cây, nhưng chỉ một trong số đó được sử dụng.Sự liên quan của mẫu đầu tiên trong mẫu mã của bạn là gì? Tại điểm nào trong chế độ thừa kế của chế độ xem dạng cây, bạn có muốn thêm các nút không? Có lẽ ảnh chụp màn hình hoặc mô hình có hiệu lực có thể giúp tại đây –

+0

--- Giải pháp của bạn là ở đây --- http://stackoverflow.com/questions/8861371/adding-nodes-to-a-specific-parent- node-in-a-treeview-c –

Trả lời

17

Nó không phải là xấu, nhưng bạn quên gọi treeView2.EndUpdate() trong phương pháp addParentNode_Click() của bạn.
Bạn cũng có thể gọi treeView2.ExpandAll() ở cuối phương thức addChildNode_Click() để xem trực tiếp nút con của bạn.

private void addParentNode_Click(object sender, EventArgs e) { 
    treeView2.BeginUpdate(); 
    //treeView2.Nodes.Clear(); 
    string yourParentNode; 
    yourParentNode = textBox1.Text.Trim(); 
    treeView2.Nodes.Add(yourParentNode); 
    treeView2.EndUpdate(); 
} 

private void addChildNode_Click(object sender, EventArgs e) { 
    if (treeView2.SelectedNode != null) { 
    string yourChildNode; 
    yourChildNode = textBox1.Text.Trim(); 
    treeView2.SelectedNode.Nodes.Add(yourChildNode); 
    treeView2.ExpandAll(); 
    } 
} 

Tôi không biết đó có phải là lỗi hay không nhưng có 2 TreeViews. Tôi đã thay đổi nó để chỉ 1 TreeView ...

EDIT: trả lời cho câu hỏi thêm:
Bạn có thể khai báo các biến giữ tên nút con bên ngoài của các mệnh đề if:

private void addChildNode_Click(object sender, EventArgs e) { 
    var childNode = textBox1.Text.Trim(); 
    if (!string.IsNullOrEmpty(childNode)) { 
    TreeNode parentNode = treeView2.SelectedNode ?? treeView2.Nodes[0]; 
    if (parentNode != null) { 
     parentNode.Nodes.Add(childNode); 
     treeView2.ExpandAll(); 
    } 
    } 
} 

Lưu ý: xem http://www.yoda.arachsys.com/csharp/csharp2/nullable.html để biết thông tin về ?? nhà điều hành.

+0

cảm ơn Julien, mã của bạn hoạt động nhưng tôi muốn thêm node2 con trong nút cha thứ hai. Với mã này, nếu tôi thêm childnode2 vào parentnode2 nó không làm theo cách đó. Nó luôn thêm con mới vào parentnode1. – tintincutes

+0

Bạn có muốn thêm nút con vào nút được chèn cuối cùng hoặc nút đã chọn không? Ví dụ: –

+0

đến nút đã chọn. – tintincutes

2

Ví dụ về cách thêm nút con:

private void AddExampleNodes() 
     { 
      TreeNode node; 

      node = treeView1.Nodes.Add("Master node"); 
      node.Nodes.Add("Child node"); 
      node.Nodes.Add("Child node 2"); 

      node = treeView1.Nodes.Add("Master node 2"); 
      node.Nodes.Add("mychild"); 
      node.Nodes.Add("mychild"); 
     } 
+0

Hi Stormenet, cảm ơn. Nhưng tôi nghĩ rằng đây là một cây treeview hoàn chỉnh, đúng không? – tintincutes

2

Dường như bạn chỉ thêm trẻ em để phụ huynh đầu tiên treeView2.Nodes[0].Nodes.Add(yourChildNode)
Tùy thuộc vào cách bạn muốn nó để hành xử, bạn cần phải được rõ ràng về node cha bạn muốn thêm đứa trẻ vào.
Ví dụ, từ ảnh chụp màn hình của bạn, nếu bạn muốn thêm đứa trẻ đến nút thứ hai bạn sẽ cần:
treeView2.Nodes[1].Nodes.Add(yourChildNode)
Nếu bạn muốn thêm những đứa trẻ đến nút đang được chọn, có được TreeView.SelectedNode và thêm trẻ em nó.

Hãy thử TreeView để có ý tưởng về cách thức hoạt động của lớp học. Thật không may là tài liệu msdn khá nhẹ trên các mẫu mã ...

Tôi đang thiếu rất nhiều kiểm tra an toàn ở đây!

Giống như (chưa được kiểm tra):

private void addChildNode_Click(object sender, EventArgs e) { 
    TreeNode ParentNode = treeView2.SelectedNode; // for ease of debugging! 
    if (ParentNode != null) { 
    ParentNode.Nodes.Add("Name Of Node"); 
    treeView2.ExpandAll(); // so you can see what's been added    
    treeView2.Invalidate(); // requests a redraw 
    } 
} 
+0

Cảm ơn Byron, tôi muốn thêm nút con vào nút cha được chọn. Bạn đã đề cập, TreeView.SelectedNode nơi tôi có thể thêm nó? trong nút addParentNode hoặc add_ChildNode? Cảm ơn – tintincutes

+0

Hi Byron, trong mã "Treenode" của bạn là "TreeNode" hoặc "Treenode". Bởi vì nếu tôi gõ "Treenode", tôi có một dấu đỏ. Có nghĩa là có điều gì đó sai. – tintincutes

+0

đã giúp tôi cảm ơn! – Aisha

10

I có thể thêm vào Stormenet dụ một số KISS (Keep It Simple & Stupid):

Nếu bạn đã có một TreeView hoặc vừa tạo một thể hiện của nó : Hãy điền một số dữ liệu - Ví dụ: Một phụ huynh có hai con:

  treeView1.Nodes.Add("ParentKey","Parent Text"); 
      treeView1.Nodes["ParentKey"].Nodes.Add("Child-1 Text"); 
      treeView1.Nodes["ParentKey"].Nodes.Add("Child-2 Text"); 

Một ví dụ khác. hai cha mẹ đầu tiên có hai thứ hai con của con:

  treeView1.Nodes.Add("ParentKey1","Parent-1 Text"); 
      treeView1.Nodes.Add("ParentKey2","Parent-2 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes.Add("Child-1 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes.Add("Child-2 Text"); 
      treeView1.Nodes["ParentKey2"].Nodes.Add("Child-3 Text"); 

thực hiện nếu xa hơn - trẻ con của đứa trẻ 2:

  treeView1.Nodes.Add("ParentKey1","Parent-1 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes.Add("Child-1 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes.Add("ChildKey2","Child-2 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes["ChildKey2"].Nodes.Add("Child-3 Text"); 

Như bạn thấy bạn có thể có nhiều con và cha mẹ của như bạn muốn và những có thể có con của con và cứ thế .... Hy vọng tôi sẽ giúp!

0
void treeView(string [] LineString) 
    { 
     int line = LineString.Length; 
     string AssmMark = ""; 
     string PartMark = ""; 
     TreeNode aNode; 
     TreeNode pNode; 
     for (int i=0 ; i<line ; i++){ 
      string sLine = LineString[i]; 
      if (sLine.StartsWith("ASSEMBLY:")){ 
       sLine = sLine.Replace("ASSEMBLY:",""); 
       string[] aData = sLine.Split(new char[] {','}); 
       AssmMark = aData[0].Trim(); 
       //TreeNode aNode; 
       //aNode = new TreeNode(AssmMark); 
       treeView1.Nodes.Add(AssmMark,AssmMark); 
      } 
      if(sLine.Trim().StartsWith("PART:")){ 
       sLine = sLine.Replace("PART:",""); 
       string[] pData = sLine.Split(new char[] {','}); 
       PartMark = pData[0].Trim(); 
       pNode = new TreeNode(PartMark); 
       treeView1.Nodes[AssmMark].Nodes.Add(pNode); 
      } 
     } 
0

Bạn có thể thực hiện như sau để Điền câyView với nút cha và nút con. Và cũng với thành viên hiển thị và giá trị của các nút cha và con:

arrayRoot = taskData.GetRocordForRoot(); // iterate through database table 
    for (int j = 0; j <arrayRoot.length; j++) { 
       TreeNode root = new TreeNode(); // Creating new root node 
       root.Text = "displayString"; 
       root.Tag = "valueString"; 
       treeView1.Nodes.Add(root); //Adding the root node 

      arrayChild = taskData.GetRocordForChild();// iterate through database table 
       for (int i = 0; i < arrayChild.length; i++) { 
        TreeNode child = new TreeNode(); // creating child node 
        child.Text = "displayString" 
        child.Tag = "valueString"; 
        root.Nodes.Add(child); // adding child node 
       } 

      } 
1

Tôi cần phải làm điều tương tự và gặp phải vấn đề tương tự. Tôi đã sử dụng sự kiện AfterSelect để đảm bảo rằng tôi đã không nhận được nút đã chọn trước đó.

Thực sự rất dễ tham khảo nút chính xác để nhận nút con mới.

private void TreeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) 
{ 
    //show dialogbox to let user name the new node 
    frmDialogInput f = new frmDialogInput(); 
    f.ShowDialog(); 

    //find the node that was selected 
    TreeNode myNode = TreeView1.SelectedNode; 
    //create the new node to add 
    TreeNode newNode = new TreeNode(f.EnteredText); 
    //add the new child to the selected node 
    myNode.Nodes.Add(newNode); 
} 
0

Guys sử dụng mã này để thêm nút và childnodes cho TreeView từ mã C#. *

KISS (Keep It Simple & ngốc:) *

protected void Button1_Click (object sender, EventArgs e)

{

 TreeNode a1 = new TreeNode("Apple"); 

     TreeNode b1 = new TreeNode("Banana"); 
     TreeNode a2 = new TreeNode("gree apple"); 
     TreeView2.Nodes.Add(a1); 
     TreeView2.Nodes.Add(b1); 
     a1.ChildNodes.Add(a2); 

}

+0

Không có '&' trong KISS –

+0

Đó là nút. Không có tài sản ChildNotes. –

0
SqlConnection con = new SqlConnection(@"Data Source=NIKOLAY;Initial Catalog=PlanZadanie;Integrated Security=True"); 
     SqlCommand cmd = new SqlCommand(); 
     DataTable dt = new DataTable(); 
     public void loadTree(TreeView tree) 
     { 
      cmd.Connection = con; 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "SELECT [RAZDEL_ID],[NAME_RAZDEL] FROM [tbl_RAZDEL]"; 
      try 
      { 
       con.Open(); 
       SqlDataReader reader = cmd.ExecuteReader(); 
       while (reader.Read()) 
       { 
        tree.Nodes.Add(reader.GetString(1)); 
        tree.Nodes[0].Nodes.Add("yourChildNode"); 
        tree.ExpandAll(); 

       } 

       con.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Ошибка с сообщением: " + ex.Message); 
      } 


     } 

+0

Khi trả lời câu hỏi, cách tốt nhất là giải thích chi tiết hơn để người dùng khác của trang web có thể dễ dàng hiểu hơn. – Tristan

Các vấn đề liên quan