包含父对象和子对象的Treeview

时间:2015-11-23 07:31:38

标签: c# .net

美好的一天,

有人可以帮助我填充带有子对象的树视图。

我的文件布局如下所示。

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

我正在使用正则表达式来匹配我的字符串,如果我找到了一个Header我想要创建一个父节点,如果在标题下找到了一个子项,我想创建一个子节点。

匹配部分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++;
    }
}

1 个答案:

答案 0 :(得分: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++;
}

我认为你的正则表达式正常工作。此外,请注意此代码不执行任何验证。如果输入文件格式错误,则可能导致异常。我建议在程序中添加验证步骤。