2015-04-20 2 views
0

У меня есть TreeView, что каждый элемент имеет другой код.
Пользователь может проверить 5 предметов и сохранить их. Затем у меня есть список узлов узлов treeView.
Я хочу показать отмеченные элементы в форме загрузки пользователю. Но мой код не работает. Может кто-нибудь мне помочь?set Check to treeView checkbox

Это мой код:

private void chechTreeViewItems(List<int> remID) 
    { 
     foreach (System.Windows.Forms.TreeNode item in this.tvRemark.Nodes) 
     { 
      for (int i = 0; i < remID.Count; i++) 
      { 
       if (Convert.ToInt16(item.Tag)== remID[i]) 
       { 
        item.Checked = true; 
       } 
      } 

     } 

    } 

Я думаю, что этот код не может отслеживать дочерние узлы.

+0

Вы пишете приложение WPF или winform? – ANewGuyInTown

+0

Это приложение winform – Khodayar

+0

Является ли ваш список узлов плоским деревом или иерархической структурой? – ANewGuyInTown

ответ

0

Если есть только один корневой узел, который имеет несколько подвидов узлов (только один уровень), то вам не нужна рекурсия здесь. Просто установите корневой узел в ваш цикл foreach правильно:

private void chechTreeViewItems(List<int> remID) 
{ 
    foreach (System.Windows.Forms.TreeNode item in this.tvRemark.Nodes[0].Nodes) 
    { 
     for (int i = 0; i < remID.Count; i++) 
     { 
      if (Convert.ToInt16(item.Tag) == remID[i]) 
      { 
       item.Checked = true; 
      } 
     } 
    } 
} 
0

ли что-то вроде этого:

private void ChechTreeViewItems(List<int> remId) 
    { 
     foreach (TreeNode item in this.Nodes) 
     { 
      if (remId.Contains(item.Tag)) 
      { 
       item.IsChecked = true; 
      } 

      if (item.Children != null) 
      { 
       this.CheckChildTreeNodes(item.Children, remId); 
      } 
     } 
    } 

Позвони повторно скоропись CheckChildTreeNodes метод обеспечения, дочерние узлы проверяются соответственно.

private void CheckChildTreeNodes(IEnumerable<TreeNode> childnodes, ICollection<int> remId) 
    { 
     if (childnodes==null) 
     { 
      return; 
     } 
     foreach (TreeNode node in childnodes) 
     { 
      if (remId.Contains(node.Tag)) 
      { 
       node.IsChecked = true; 
      } 
      this.CheckChildTreeNodes(node.Children, remId); 
     } 
    } 
0

С вашей помощью я только что решил свою проблему.

private void chechTreeViewItems(List<int> remID) 
    { 
     for (int i = 0; i < remID.Count; i++) 
     { 

      foreach (System.Windows.Forms.TreeNode item in this.tvRemark.Nodes[0].Nodes) 
      { 

       if (Convert.ToInt16(item.Tag) == remID[i]) 
       { 
        item.Checked = true; 
       } 
      } 

     } 

    }