2016-10-28 6 views
3

Привет Я пытаюсь подключить дочерний узел к родительскому узлу в зависимости от того, соответствуют ли их строки.Назначить объект дочернему узлу treeview в C# для определения родителя

У меня возникают проблемы, потому что я не уверен, как идентифицировать родителя по имени. Например, если «string a» == «string a», то я хочу добавить дочерние узлы LoanName к родительскому идентификатору, где строка соответствует родительскому имени.

Это работает, если я делаю:

tvTodoList.Nodes[0].Nodes.Add(activityResult.ActivityName); 

Но, очевидно, это будет прикрепить дочерний узел к первому родительскому узлу в TreeView. Как получить его в соответствии с именем переменной loanresult.LoanName?

Ниже приведен код для моего метода FillTodoList

private void FillTodoList() 
{ 
    var nol = NetworkOpsLayer.NetworkOpsLayer.CreateForDirectMongoConnection("mongodb://localhost", "test", "loans"); 
    //demoSave(nol); 

    var loanList = nol.GetDocsWhichMatchGivenDocString("{ \"isActive\" : 1 }"); 

    foreach (string s in loanList) 
    { 
     //System.Console.WriteLine(s); 
     var loanResult = JsonConvert.DeserializeObject<RootObject>(s); 

     tvTodoList.Nodes.Add("Loan Name: " + loanResult.LoanName); 

     //Add children to each Loan 

     var con = NetworkOpsLayer.NetworkOpsLayer.CreateForDirectMongoConnection("mongodb://localhost", "test", "activity"); 
     //demoSave(con); 
     var activityList = con.GetDocsWhichMatchGivenDocString("{ \"isActive\" : 1 }"); 

     foreach (string st in activityList) 
     { 
      var activityResult = JsonConvert.DeserializeObject<Activity>(st); 
      if (loanResult.LoanName == activityResult.ParentLoanName) 
      { 
       tvTodoList.Nodes[loanResult.LoanName].Nodes.Add(activityResult.ActivityName); 
      } 
     } 
    } 
} 
+0

не спам случайных тегов или опустить важные. Это не имеет ничего общего с node.js или WPF. * * * Имеет отношение к winforms. –

+2

Используйте свойство 'Name' узла, чтобы назначить строковый идентификатор, если сможете. В противном случае используйте свойство «Tag», чтобы добавить дополнительную информацию. Вы можете найти узел, используя его «Имя» или его «тег», как описано здесь: [Как выбрать узел по тегу в Windows Forms TreeView] (https://stackoverflow.com/questions/34228617/how-to-select -a-node-by-tag-in-windows-forms-treeview) –

+1

@RezaAghaei Вы правы. Хотя это не полностью решило мой вопрос, это помогло мне получить ответ. Я буду отмечать это как ответ и ниже комментарий о дополнительных шагах, которые я предпринял для получения решения. – A1raa

ответ

2

Метод TreeNodeCollection.Find (строка, логическое значение) поможет с этим ...

foreach (string st in activityList) 
{ 
    var activityResult = JsonConvert.DeserializeObject<Activity>(st); 
    if (loanResult.LoanName == activityResult.ParentLoanName) 
    { 
     TreeNode[] matches = tvTodoList.Nodes.Find("Loan Name: " + loanResult.LoanName, false); 
     if (matches.Length > 0) matches[0].Nodes.Add(activityResult.ActivityName); 
    } 
} 
+1

Используя свойство 'Name', вам не нужно искать себя в коллекции узлов. Просто используйте 'treeView1.Nodes.Find (« что-то »,« истина »). –

+1

При дальнейшей проверке я обнаружил, что вы правы. Параметр с именем «ключ» немного вводит в заблуждение, я думал, что он действительно ссылается на ключ. –

+0

@BlakeThingstad Спасибо за ваш ответ. К сожалению, это не добавление дочерних узлов к родительскому узлу. 'Matches [0] .Nodes.Add (activityResult.ActivityName);' никогда не запускается. Я пытаюсь понять, почему, потому что строки соответствуют только штрафу. – A1raa

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