2013-08-23 2 views
1

После попытки добавления данных, введенных в текстовое поле (ScanIdBox) и щелчка на AddButton, мой rootNode, похоже, исчез, а TreeView затем пуст. Я не уверен, что я делаю неправильно здесь, так как я новичок в Windows Forms и 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(); 
     } 
    } 

EDIT: выяснено, почему узел исчезает. Я очищал узлы в PopulateTreeView. Прокомментировал это, и это застряло. Все еще не могу понять, что я делаю неправильно, чтобы добавить элементы. Они все еще не добавляют.

EDIT2: этот код позволяет мне добавлять элементы в 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.Nodes.add. (boxNumber). – Bit

Смежные вопросы