Как создать папку в коде за страницей - PullRequest
0 голосов
/ 03 апреля 2009

Это относится к вчерашнему вопросу "Как создать папки в ASP.NET в коде позади" . Проблема в том, что я хочу создавать динамические папки во время выполнения. Имена папок будут вводиться через 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) и создаю эти же папки под одним и тем же Sumit (Parent1), индекс должен быть Newfolder (3), Newfolder (4). Если я создаю еще один NewFolder под Sumit с тем же именем, то индекс должен быть NewFolder (6).

Может кто-нибудь изменить мой код, чтобы получить желаемый результат?

Ответы [ 3 ]

2 голосов
/ 03 апреля 2009

Ваша проблема здесь - ваш алгоритм, чтобы определить, существует ли предмет. В основном ваш код:

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 голос
/ 03 апреля 2009

Ваше сравнение текста отключено. Поскольку вы, возможно, добавили номера к предыдущим узлам под одним и тем же родителем, новое имя вы встретите только один раз.

Это должно выглядеть так:

if (TreeView1.Nodes[i].Text.StartsWith(TextBox1.Text))
    found++
1 голос
/ 03 апреля 2009

Перед тем, как вы это сделаете, я усвоил трудный путь, согласно которому вы не должны создавать / удалять папки в запущенном приложении, иначе вы вызовете перезапуск пула приложений. Поэтому убедитесь, что вы создаете каталоги где-то еще на сервере. (Надеюсь, у вас есть такой доступ)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...