Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наполнение ListView через TreeView 
:(
    Опции темы
ДобренькийПапаша
Дата 21.7.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Есть проводник. Как лучше сделать сабж? Можно ли и нужно ли делать binding? Или делать как в примере в MSDN:
Код

void treeView1_NodeMouseClick(object sender,
            TreeNodeMouseClickEventArgs e) 
        {
            TreeNode newSelected = e.Node;
            listView1.Items.Clear();
            DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag;
            ListViewItem.ListViewSubItem[] subItems;
            ListViewItem item = null;

            foreach (DirectoryInfo dir in nodeDirInfo.GetDirectories())
            {
                item = new ListViewItem(dir.Name, 0);
                subItems = new ListViewItem.ListViewSubItem[]
                    {new ListViewItem.ListViewSubItem(item, "Directory"), 
                     new ListViewItem.ListViewSubItem(item, 
                        dir.LastAccessTime.ToShortDateString())};
                item.SubItems.AddRange(subItems);
                listView1.Items.Add(item);
            }
            foreach (FileInfo file in nodeDirInfo.GetFiles())
            {
                item = new ListViewItem(file.Name, 1);
                subItems = new ListViewItem.ListViewSubItem[]
                    { new ListViewItem.ListViewSubItem(item, "File"), 
                     new ListViewItem.ListViewSubItem(item, 
                        file.LastAccessTime.ToShortDateString())};

                item.SubItems.AddRange(subItems);
                listView1.Items.Add(item);
            }

            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        }



Да, и как вывести в ListView subItems после выбора одного из Items? (Items естесственно должны стать невидимы после выбора). Это в случае если пользователь хочет передвигаться при помощи ListView а не при помощи TreeView.

Это сообщение отредактировал(а) ДобренькийПапаша - 21.7.2009, 17:26


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
ДобренькийПапаша
Дата 21.7.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Короче я если двойной клик идёт из ListView делаю следующее:

Код

private void ExploreView_DoubleClick(object sender, EventArgs e)
        {
            
             Point clickPoint = ExploreView.PointToClient(Cursor.Position);
             ListViewItem item = ExploreView.GetItemAt(clickPoint.X, clickPoint.Y);
             if (item != null)
             {
                 TreeNode sendNode = FindNode(ExploreTree, item.Text);
                 TreeViewEventArgs cur = new TreeViewEventArgs(sendNode);
                 ExploreTree_BeforeExpand(ExploreView, cur);
             }
        }


FindNode:
Код

private TreeNode FindNode(TreeView tv, string name)
        {
            // Ищем в узлах первого уровня.
            foreach (TreeNode tn in tv.Nodes)
            {
                // Если нашли,
                if (tn.Text == name)
                {
                    // то возвращаем.
                    return tn;
                }
            }

            // Ищем в подузлах.
            TreeNode node;
            foreach (TreeNode tn in tv.Nodes)
            {
                // Делаем поиск в узлах.
                node = FindNode(tn, name);
                // Если нашли,
                if (node != null)
                {
                    // то возвращаем.
                    return node;
                }
            }
            // Ничего не нашли.
            return null;
        }
        private TreeNode FindNode(TreeNode treenode, string name)
        {
            // Ищем в узлах первого уровня.
            foreach (TreeNode tn in treenode.Nodes)
            {
                // Если нашли,
                if (tn.Text == name)
                {
                    // то возвращаем.
                    return tn;
                }
            }

            // Ищем в подузлах.
            TreeNode node;
            foreach (TreeNode tn in treenode.Nodes)
            {
                // Делаем поиск в узлах.
                node = FindNode(tn, name);
                // Если нашли,
                if (node != null)
                {
                    // то возвращаем.
                    return node;
                }
            }
            // Ничего не нашли.
            return null;
        }


Before_expand:
Код

private void ExploreTree_BeforeExpand(object sender, TreeViewEventArgs e)
        {
            Path.Text = e.Node.FullPath;
            AuthenticationForm curEx=new AuthenticationForm();
            using (SqlConnection curConnect =
                   AuthenticationForm.GetDbConnection(curEx.ServerPath.Text, curEx.BasePath.Text))
            {
                curEx.Dispose();
                try
                {
                   
                    e.Node.Expand();
                    curConnect.Open();

                   //Тут заполнение кликнутых узлов
              
                    ExploreView.Items.Clear();                                    //Очищаю ListView
                    foreach (TreeNode curNode in e.Node.Nodes)       //Наполняю ListView
                    {
                        ExploreView.Items.Add(curNode.Text, 0);
                    }
                }
                catch (SqlException ex)
                {
                    curConnect.Close();
                    MessageBox.Show(ex.Message, ex.Source);
                }
           }
        }


Смысл ясен, тут кое-что не доделаною. При нажатии на знак сворачивания\разворачивания не должно быть изменения ListView, а только при клике на самом ноде. Но это завтра доделаю.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.