2013-08-23 80 views
1

嘗試添加鍵入到我的文本框(ScanIdBox)中的數據並單擊AddButton後,我的rootNode似乎消失了,TreeView變爲空白。我不確定我在這裏做錯了什麼,因爲我對Windows窗體和TreeViews不熟悉。我想要做的是添加一個parentNode,如果該項目的長度是8,並且是一個childNode,如果該項目的長度是9.我不希望根節點消失,但希望所有長度爲8個字符的項目都是父節點,並且希望其他所有項目都是最近添加的父節點的子節點。我怎樣才能做到這一點?TreeView中消失的節點

public class Nodes 
    { 
     public TreeNode rootNode = new TreeNode(); 
     public TreeNode parentNode = new TreeNode(); 
     public TreeNode childNode = new TreeNode(); 
    } 

    public void Scan_Form_Load(object sender, EventArgs e) 
    { 
     _boxNumberRepository = new BoxNumberRepository(); 

     Nodes _rootNode = new Nodes(); 
     _rootNode.rootNode.Text = "Scan ID"; 
     BoxAndFileList.Nodes.Add(_rootNode.rootNode); 

     Text = "Scan Form"; 
     AcceptButton = AddButton; 
     ScanIdLabel.Text = "Enter Scan ID #"; 
     AddButton.Text = "Add"; 
     RemoveButton.Text = "Remove"; 
    } 

    public void PopulateTreeView() 
    { 
     Nodes _rootNode = new Nodes(); 
     BoxAndFileList.Nodes.Clear(); 
     ScanIdBox.Text = string.Empty; 
     var items = new List<string>(_boxNumberRepository.GetAllItems()); 
     foreach (var boxNumber in items) 
      if (boxNumber.Length == 8) 
      { 
       _rootNode.rootNode.Nodes.Add(boxNumber); 
      } 
      else 
      { 
       _rootNode.parentNode.Nodes.Add(boxNumber); 
      } 
    } 

    public void AddButton_Click(object sender, EventArgs e) 
    { 
     var boxNumber = ScanIdBox.Text.Trim(); 

     if (!String.IsNullOrEmpty(boxNumber)) 
     { 
      _boxNumberRepository.AddItem(boxNumber); 
      PopulateTreeView(); 
     } 
    } 

編輯:找出爲什麼節點正在消失。我正在清除PopulateTreeView中的節點。評論說,它停留在周圍。仍然無法弄清楚我做錯了添加項目。他們仍然沒有添加。

編輯2:此代碼現在允許我將項目添加到TreeView,但它仍然刪除rootNode。我不完全確定我真的需要rootNode,現在我想到了,所以我並不真的擔心它。

public void PopulateTreeView() 
    { 
     BoxAndFileList.Nodes.Clear(); 
     var items = new List<string>(_boxNumberRepository.GetAllItems()); 
     foreach (var boxNumber in items) 
      BoxAndFileList.Nodes.Add(boxNumber); 
     ScanIdBox.Text = string.Empty; 
    } 
+2

「PopulateTreeView」方法中沒有任何內容似乎向「BoxAndFileList」添加任何內容。我不太瞭解樹視圖,但可能會加入類似於'BoxAndFileList.Nodes.Add(_rootNode.rootNode)'的東西(''(就像你在'Scan_Form_Load'方法中那樣)? –

回答

0

我最終殺死了TreeView。它可能工作得很好,但我只是將其添加到列表中。這些項目是按順序添加的,所以這不是什麼大問題。這不是一個好的解決方案,但它起了作用,客戶很高興。

0

我相信你需要更改您的代碼:

public void PopulateTreeView() 
{ 
    var items = new List<string>(_boxNumberRepository.GetAllItems()); 
    foreach (var boxNumber in items) 
     BoxAndFileList.SelectedNode.Nodes.Add(boxNumber); 
    ScanIdBox.Text = string.Empty; 
} 

注通過SelectedNode增加了家長,你不希望清除的節點。

+0

未將對象引用設置爲一個對象在行BoxAndFileList.SelectedNode.Nodes.Add(boxNumber); 我想這是因爲沒有選定的節點。應該選擇一個節點被添加到父母的子節點? –

+0

或者你必須去找到/選擇要添加到的Parent節點,但是,您必須向父節點添加一個子節點,因此您可以選擇節點或查找要添加到的父節點和_parent.Nodes.add。(boxNumber)。 – Bit