2015-11-23 5 views
0

Добрый день,Treeview с родительскими и дочерними объектами

Может кто-то помочь мне с заполнением древовидной структуры дочерними объектами.

Мое расположение файла выглядит следующим образом.

Fruits 
apple,green,red 
banana,yellow,green 
Vegtables 
Pumpkin,yellow 
Beans,Green 

Output should be : 
+Fuits 
    -apple,green,red 
    -banana,yellow,green 
+Vegtables 
    -Pumpkin,yellow 
    -Beans,Green 

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

Соответствующая часть работает 100%, но мое древовидное представление не работает.

int counter = 0; 
if (filename.Trim() != string.Empty) 
{ 
    System.IO.StreamReader file = new System.IO.StreamReader(filename); 
    string[] columnnames = file.ReadLine().Split(' '); 
    while ((line = file.ReadLine()) != null) 
    { 
     Match match = regex.Match(line); //Match Header 
     Match matchSub = regexSub.Match(line);//Match Detail 
     TreeNode newNode = new TreeNode(); 

     if (match.Success) 
     { 
      newNode.Text = line; 
      treeCards.Nodes.Add(newNode); 

     } 
     else if (matchSub.Success) 
     { 

      TreeNode newNode1 = new TreeNode(); 
      newNode.Nodes.Add(newNode1); 
     } 
     counter++; 
    } 
} 
+2

Пожалуйста, будьте более конкретными, чем «не работает». Пожалуйста, предоставьте [хороший, _minimal_, _complete_ пример кода] (http://stackoverflow.com/help/mcve), который надежно воспроизводит любую конкретную проблему, о которой вы действительно спрашиваете. Мне кажется, что ваша основная проблема заключается в том, что вы выделяете 'newNode' для каждой строки текста, а не только при изменении заголовка. Но с таким неопределенным вопросом, я не могу сказать точно, потому что я даже не знаю, о какой конкретной проблеме вы спрашиваете. –

ответ

0

Проблема в том, что вы создаете новый узел дерева, представляющий заголовок для каждой итерации цикла while. Пока он должен быть создан только в том случае, если заголовок найден (т. Е. Когда match.Success == true). Попробуйте что-то вроде этого:

var currentHeader = null; 
while ((line = file.ReadLine()) != null) 
{ 
    Match match = regex.Match(line); //Match Header 
    Match matchSub = regexSub.Match(line);//Match Detail 

    if (match.Success) 
    { 
     currentHeader = new TreeNode(); 
     currentHeader .Text = line; 
     treeCards.Nodes.Add(currentHeader); 
    } 
    else if (matchSub.Success) 
    { 
     var newNode = new TreeNode(); 
     newNode.Text = line; 
     currentHeader.Nodes.Add(newNode1); 
    } 
    counter++; 
} 

Я предположил, что ваши регулярные выражения работают правильно. Кроме того, обратите внимание, что этот код не выполняет никакой проверки. Если входной файл имеет неправильный формат, это может вызвать исключение. Я рекомендую добавить шаг проверки в вашу программу.

+0

большое спасибо – Gucci

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