2012-05-23 3 views
1

일부 연구를 수행했지만 문제가있는 항목을 발견했지만 그 중 아무도 문제를 해결하지 못했습니다. C# 목록에서 트리 뷰 채우기

SharpSvn: Getting repository structure and individual files

populate treeview from a list of path

http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.aspx

http://social.msdn.microsoft.com/Forums/en/winforms/thread/dae1c72a-dd28-4232-9aa4-5b38705c0a97

나는 사용자가 하나 개의 폴더를 선택할 수 있도록 내 SVN 폴더의 저장소 브라우저를 만들고 싶어 그리고 그것은에 반환 될 것입니다 텍스트 상자.

이 내 실제 코드 이름 4에서해야

+---Name1 
| | 
| +------Name2 
| | 
| +------Name3 
| | 
| +------Name5 
| | 
| +------Name6 
| 
+---Name4 

만 명 5 명 6 :

private void sourceTrunkBrowseButton_Click(object sender, EventArgs e) 
    { 
     using (SvnClient svnClient = new SvnClient()) 
     { 
      Collection<SvnListEventArgs> contents; 
      Collection<SvnListEventArgs> contents2; 
      List<TreeItem> files = new List<TreeItem>(); 
      if (svnClient.GetList(new Uri("https://sourcecode/svn/XXXXXX"), out contents)) 
      { 
       foreach (SvnListEventArgs item in contents) 
       { 
        if (item.Path != "") 
        { 
         files.Add(new TreeItem(item.Path, 0)); 

         if (svnClient.GetList(new Uri("https://sourcecode/svn/XXXXX" + item.Path), out contents2) && item.Path != "") 
         { 
          foreach (SvnListEventArgs item2 in contents2) 
          { 
           if (item2.Path != "") 
           { 
            files.Add(new TreeItem(item2.Path, 1)); 
           } 
          } 
         } 
        } 
       } 
      } 
      svnBrowser_.FillMyTreeView(files); 
      svnBrowser_.Show(); 
     } 
    } 

그리고

public void FillMyTreeView(List<AutoTrunk.TreeItem> files) 
{ 

     // Suppress repainting the TreeView until all the objects have been created. 
     svnTreeView.BeginUpdate(); 

     svnTreeView.Nodes.Clear(); 
     List<TreeNode> roots = new List<TreeNode>(); 
     roots.Add(svnTreeView.Nodes.Add("Items")); 
     foreach (AutoTrunk.TreeItem item in files) 
    { 
     if (item.Level == roots.Count) roots.Add(roots[roots.Count - 1].LastNode); 
     roots[item.Level].Nodes.Add(item.BrowsePath); 
    } 

     // Begin repainting the TreeView. 
     svnTreeView.EndUpdate(); 
} 

하지만 내 나무는 다음과 같이

죄송합니다. 긴 게시물과 감사를 위해!

+0

첫 번째'foreach (SvnListEventArgs item in contents)'루프에서 두 번째'if'를 첫 번째'if'에서 중첩되도록 변경하십시오. 경로가 비어있는 경우 두 번째'if'가 실행되는 것을 원하지 않습니다. 왜냐하면 궁극적으로 소스 트렁크에 대해서'GetList'를 다시 호출하게됩니다. (IE :''https : // sourcecode/svn/XXXXXX + path''는'https : // sourcecode/svn/XXXXXX'가됩니다. 빈 문자열). – SPFiredrake

+0

사실, 문제는 해결되지 않지만 변경하겠습니다. – LolCat

답변

3

if(item.Level == roots.Count) 내 문제라고 생각합니다. 항목의 레벨이 정확합니까? 예를 들어, Name1Name4이 뿌리 인 경우 두 번째 루트를 만난 후에는 어떻게됩니까? 이는 의도 한 결과를 제공합니까?

TreeNode root = svnTreeView.Nodes.Add("Items"); 
TreeNode workingNode = root; 
foreach (AutoTrunk.TreeItem item in files) 
{ 
    if (item.Level == 0) 
     workingNode = root.Nodes.Add(item.BrowsePath); 
    else 
     workingNode.Nodes.Add(item.BrowsePath); 
} 

그냥 생각해보십시오.

+0

예, 해결되었습니다! 감사! – LolCat