2009-04-03 15 views
0

Dies bezieht sich auf die Frage von gestern "How do I create folders in ASP.NET in code behind". Das Problem ist, dass ich zur Laufzeit dynamische Ordner erstellen möchte. Ordnernamen werden über eine TextBox eingegeben und die Ausgabe wird in einer Baumansicht angezeigt. Das Formular wird gesendet, wenn ich den ersten Ordnernamen in Textfeld1 eingeben und auf die Schaltfläche "Ordner hinzufügen" klicken. Wenn ich mehrere Ordner mit demselben Namen übergebe, sollte die Ausgabe eine indizierte Erhöhung des Namens sein (z. B. FooFolder, FooFolder (2), FooFolder (3) usw.). Es gibt zwei Ereignisse: Ordnerereignis hinzufügen und Ordnerereignis entfernen. Wenn ich einen bestimmten untergeordneten Ordner auswähle und auf die Schaltfläche "Ordner entfernen" klicke, wird der Ordner entfernt. Zum Hinzufügen eines Ordners habe ich den folgenden Code geschrieben:So erstellen Sie einen Ordner im Code hinter der Seite

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); 
} 

In meinem Code wird der childNode Index nicht erhöht wird; es ist immer 1, wie folgt aus:

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

im Strukturansichts ich ImageSet="XPFileExplorer" gesetzt haben. So ist die Ausgabe wie folgt aussehen:

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

Wenn ich ein Kind Ordner löschen, sagen wir, Newfolder (3) und Newfolder (4) und erstellen die gleichen Ordner unter dem gleichen Sumit (Parent1), sollte der Index sein NeuerOrdner (3), NeuerOrdner (4). Wenn ich unter Sumit einen weiteren NewFolder mit demselben Namen erstelle, sollte der Index NewFolder (6) lauten.

Könnte jemand bitte meinen Code ändern, um diese gewünschte Ausgabe zu erhalten?

Antwort

1

Bevor Sie dies tun, habe ich gelernt, auf die harte Weise, dass Sie Ordner unter einer laufenden Anwendung nicht erstellen/entfernen sollten, oder Sie werden Ihr App-Pool führen zu recyceln. Stellen Sie daher sicher, dass Sie Verzeichnisse irgendwo auf dem Server erstellen. (Hoffentlich haben Sie diesen Zugang)

2

Ihr Problem hier ist Ihr Algorithmus, um festzustellen, ob das Element existiert. Grundsätzlich Ihr Code:

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;    
} 

Lassen Sie uns durch diese gehen. Der Benutzer übergibt NewFolder, mit dem der Code ausgeführt wird, und findet keinen Knoten namens NewFolder, sodass er den Knoten auf NewFolder setzt.

Nun klickt der Benutzer hinzufügen, wieder für NewFolder, diesmal ist es NewFolder findet so der neue Name NewFolder1 wird.

Nun klickt der Benutzer hinzufügen, wieder für NewFolder, diesmal ist es NewFolder findet so der neue Name NewFolder1 wird.

Ihr Vergleich wenn TreeView1.Nodes [i] == .Text TextBox1.Text, die nur ein Knoten jemals diesen Namen haben wird. Sie müssen den numerischen Teil des Namens entfernen.

Wenn eine Namenskonvention wie NewFolder mit (1), dann können Sie ganz einfach tun. Aber basierend auf dem Code haben Sie dort den Namen des Knotens NewFolder1 wäre

1

Ihr Textvergleich ausgeschaltet ist. Da Sie früheren Knoten unter demselben übergeordneten Element möglicherweise Nummern hinzugefügt haben, werden Sie nur einmal auf den neuen Namen stoßen.

Es sollte wie folgt aussehen:

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

dieser Code nicht erwünscht output.If schenkt i Jack geben Sie als Ordnername 6-mal die Serie ist coming.Jack, Jack (1), Klinke (3), Jack (6), Buchse (10), Buchse (15), die absolut falsche Ausgabe ist. – user59637

+0

Ich bearbeitet, um Ihre gefundene Anzahl zu beheben. – SirDemon

+0

Hallo in Ihrem Codierungs-Unterordner-Index beginnt von 1 wo, wie es mit 2 ex.Start hätte sein sollen. Wenn Jack ist Elternordner Michael sind Unterordner es sollte unter Jack Michael, Michael (2), Michael (3), Michael (4) sein – user59637

Verwandte Themen