2009-04-03 7 views
0

이것은 어제의 질문 "How do I create folders in ASP.NET in code behind"을 참조한 것입니다. 문제는 런타임에 동적 폴더를 만들고 싶다는 것입니다. 폴더 이름은 TextBox를 통해 입력되며 출력은 TreeView에 표시됩니다. textbox1에 첫 번째 폴더 이름을 입력하고 "폴더 추가"버튼을 클릭하면 양식이 제출됩니다. 같은 이름의 여러 폴더를 제출할 때 결과는 이름의 색인 된 증가분 (예 : FooFolder, FooFolder (2), FooFolder (3) 등)이어야합니다. 폴더 이벤트 추가 및 폴더 이벤트 제거의 두 가지 이벤트가 있습니다. 특정 하위 폴더를 선택하고 "폴더 제거"버튼을 클릭하면 해당 폴더가 제거됩니다. 폴더를 추가하기 위해 다음 코드를 작성했습니다.코드 뒤에서 폴더를 만드는 방법

TreeNode tnode = new TreeNode(); 
if (TreeView1.Nodes.Count > 0) 
     { 
      int found = 0; 
      for (int i = 0; i < TreeView1.Nodes.Count; i++) 
      { 
       if (TreeView1.Nodes[i].Text == TextBox1.Text) 
        found += 1+i; 
      } 
      if (found > 0) 
      { 
       tnode.Text = TextBox1.Text + found.ToString(); 
      } 
      else 
      { 
       tnode.Text = TextBox1.Text; 
      } 
     } 
     else 
     { 
      tnode.Text = TextBox1.Text; 
     } 
     TreeView1.Nodes.Add(tnode); 
} 

내 코드에서 ChildNode 인덱스가 증가하지 않습니다. 그것은 다음과 같이 항상 1 : 트 리뷰에서

Sumit 
Sumit(1) 
Sumit(1) 
Sumit(1) 
Amit 
Amit(5) 
Amit(5) 
Amit(5) 

, 나는 ImageSet="XPFileExplorer"을 설정했습니다. 그래서 출력은 다음과 같아야합니다

-Root 
     -Sumit(Parent1) 
        NewFolder 
        NewFolder(2) 
        NewFolder(3) 
        NewFolder(4) 
        NewFolder(5) 
     -Amit(Parent2) 
        FooFolder 
        FooFolder(2) 
        FooFolder(3) 
        FooFolder(4) 
        FooFolder(5) 

나는, 말, Newfolder (3) Newfolder을 하위 폴더를 삭제 (4)와 같은 수밋 (상위 1)에서이 같은 폴더를 만들 경우, 인덱스가 있어야한다 새 폴더 (3), 새 폴더 (4). 같은 이름의 Sumit 아래에 NewFolder를 하나 더 만들면 인덱스는 NewFolder (6) 여야합니다.

누군가 내 코드를 수정하여 원하는 출력을 얻을 수 있습니까?

답변

1

이 작업을 수행하기 전에 실행중인 응용 프로그램에서 폴더를 만들거나 제거하면 안됩니다. 그렇지 않으면 응용 프로그램 풀이 재생 될 수 있습니다. 따라서 서버의 다른 위치에 디렉토리를 만들고 있는지 확인하십시오. (희망을 갖고 당신은 그 접근을 가지고 있습니다)

2

당신의 문제는 아이템이 있는지를 탐지하는 당신의 알고리즘입니다. 기본적으로 귀하의 코드 :

for (int i = 0; i < TreeView1.Nodes.Count; i++)    
{     
    if (TreeView1.Nodes[i].Text == TextBox1.Text) 
        found += 1+i;    
} 
if (found > 0)    
{     
    tnode.Text = TextBox1.Text + found.ToString();  
}    
else    
{     
    tnode.Text = TextBox1.Text;    
} 

이 과정을 살펴 보겠습니다. 사용자가 NewFolder를 제출하면 코드가 진행되고 NewFolder라는 노드가 없으므로 노드를 NewFolder로 설정합니다.

사용자가 NewFolder에 대해 다시 추가를 클릭하면 이번에는 NewFolder를 찾아 새 이름이 NewFolder1이됩니다.

사용자가 NewFolder에 대해 다시 추가를 클릭하면 이번에는 NewFolder를 찾아 새 이름이 NewFolder1이됩니다.

TreeView1.Nodes [i] .Text == TextBox1.Text. 하나의 노드 만이 이름을 가질 것입니다. 이름의 숫자 부분을 제거해야합니다.

NewFolder (1)와 같은 이름 지정 규칙을 사용하는 경우 쉽게이 작업을 수행 할 수 있습니다. 하지만 코드를 기반으로하면 노드 이름은 NewFolder1이됩니다.

1

텍스트 비교가 꺼져 있습니다. 같은 부모 아래에있는 이전 노드에 숫자를 추가했을 수 있으므로 새 이름을 한 번만 접하게됩니다.

그것과 같아야합니다

if (TreeView1.Nodes[i].Text.StartsWith(TextBox1.Text)) 
    found++ 
+0

내가 시리즈는 coming.Jack, 잭 (1), 잭 (3), 잭입니다 폴더 이름으로 6 번 잭을 입력 output.If 원하는 제공되지 않습니다 코드 (6), 잭 (10), 잭 (15)은 절대적으로 잘못된 출력입니다. – user59637

+0

발견 된 수를 수정하도록 편집했습니다. – SirDemon

+0

안녕하세요 귀하의 코딩 하위 폴더 색인에서 1 시작 어디로 2로 시작 했어야합니다. 예 : 잭은 부모 폴더 마이클은 잭 마이클, 마이클 (2), 마이클 (3), 마이클 (4) – user59637

관련 문제