Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
1

Поиск по treeview посредством datagridview

24.10.2016, 18:11. Показов 1221. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем суть такова. На первой форме находятся treeview и listview, а на второй datagridview. Вводится текст в textbox, на второй форме в datagridview фильтруются записи. Допустим мы находим запись с именем "Философ", это название видео файла. Так вот сама суть, фильтруем мы записи и вот то что отфильтровалось должно отобразится в treeview, а точнее в listview, в treeview просто выделяется тот каталог или подкаталог с этим файлом. Вот как это можно реализовать, имеется ввиду связь между найденной записью в datagridview, treeview и listview. Тоесть фильтрация уже работает и treeview с listview тоже работают как exploer
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2016, 18:11
Ответы с готовыми решениями:

Передача данных из TextBox в DataGridView посредством кнопки
Не могу выполнить следующее - организовать ввод из 2-х textbox параметры матрицы...

Entity framework - как выводятся таблицы из базы данных посредством DataGridView?
В общем у меня есть база данных sql, подключенная к студии с помощью EF, на форме выводятся таблицы...

Access в treeview и datagridview
Моя проблема возникла в процессе создания приложения Windows Forms. Данные таблиц Access...

Связь DataGridView и TreeView
Я заполняю из базы данных TreeView - сдесь храняться мои каталоги, для примера Страна - это корень,...

16
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
25.10.2016, 13:02 2
SCAR101, храните в узлах treeview ссылки на объекты (свойство узла .Tag)
http://stackoverflow.com/quest... ode-by-tag
вот здесь написано, как найти нужный узел по свойству объекта, ссылка на который содержится в .Tag
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
25.10.2016, 14:15  [ТС] 3
я видел этот код, но я не совсем его понимаю, да и непонятно как его связать с отфильтрованным DataGridView
0
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
25.10.2016, 16:20 4
Цитата Сообщение от SCAR101 Посмотреть сообщение
я видел этот код, но я не совсем его понимаю, да и непонятно как его связать с отфильтрованным DataGridView
это будет зависеть от того, как у вас данные в DataGridView попадают
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
26.10.2016, 08:48  [ТС] 5
как попадают ? эмм ну я создал подключение, потом в DataGridView выбрал таблицу и все, все автоматом заполнилось. Фильтрация у меня работает на уровне DataGridView, то есть я не делаю запрос к базе а просто фильтрую DataGridView.
0
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
26.10.2016, 10:05 6
SCAR101, в общих чертах как-то так:
1. При заполнении treeview присваиваете свойству узла .Tag ссылку на объект (каталог) или хотя бы на уникальный идентификатор каталога
2. При клике по datagridview получаете идентификатор выбранной записи (файла)
3. По идентификатору файла определяете в каком каталоге он находится
4. Ищете в treeview нужный узел
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
02.11.2016, 07:44  [ТС] 7
да это то понятно я не пойму как это в коде реализовать )
0
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
02.11.2016, 13:47 8
SCAR101, давайте по порядку. Как заполняется ваш treeview?
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
02.11.2016, 13:53  [ТС] 9
Вот так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
public partial class Form1 : Form
    {
 
        // Counters for statusBar1 control
        private int iFiles = 0;
        private int iDirectories = 0;
 
 
        public Form1()
        {
            InitializeComponent();
           
        }
 
 
        // Methods
        private void AddDirectories(TreeNode tnSubNode)
        {
            // This method is used to get directories (from disks, or from other directories)
 
            treeView1.BeginUpdate();
            iDirectories = 0;
 
            try
            {
                DirectoryInfo diRoot;
 
                // If drive, get directories from drives
                if (tnSubNode.SelectedImageIndex < 4)
                {
                    diRoot = new DirectoryInfo(tnSubNode.FullPath + "");
                }
 
                //  Else, get directories from directories
                else
                {
                    diRoot = new DirectoryInfo(tnSubNode.FullPath);
                }
                DirectoryInfo[] dirs = diRoot.GetDirectories();
 
                // Must clear this first, else the directories will get duplicated in treeview
                tnSubNode.Nodes.Clear();
 
                // Add the sub directories to the treeView1
                foreach (DirectoryInfo dir in dirs)
                {
                    iDirectories++;
                    TreeNode subNode = new TreeNode(dir.Name);
                    subNode.ImageIndex = 4;
                    subNode.SelectedImageIndex = 5;
                    tnSubNode.Nodes.Add(subNode);
                }
 
            }
            // Throw Exception when accessing directory: C:\System Volume Information    // do nothing
            catch {; }
 
            treeView1.EndUpdate();
        }
 
        private void AddFiles(string strPath)
        {
            listView1.BeginUpdate();
 
            listView1.Items.Clear();
            iFiles = 0;
            try
            {
                DirectoryInfo di = new DirectoryInfo(strPath + "");
                FileInfo[] theFiles = di.GetFiles();
                foreach (FileInfo theFile in theFiles)
                {
                    iFiles++;
                    ListViewItem lvItem = new ListViewItem(theFile.Name);
                    lvItem.SubItems.Add(theFile.Length.ToString());
                    lvItem.SubItems.Add(theFile.LastWriteTime.ToShortDateString());
                    lvItem.SubItems.Add(theFile.LastWriteTime.ToShortTimeString());
                    listView1.Items.Add(lvItem);
                }
            }
            catch (Exception Exc) { toolStripStatusLabel1.Text = Exc.ToString(); }
 
            listView1.EndUpdate();
        }
 
        // Events
 
        private void Form1_Load(object sender, EventArgs e)
        {
            // This routine adds all computer drives to the root nodes of treeView1 control
 
            string[] aDrives = Environment.GetLogicalDrives();
 
            treeView1.BeginUpdate();
 
            foreach (string strDrive in aDrives)
            {
                TreeNode dnMyDrives = new TreeNode(strDrive.Remove(2, 1));
 
                switch (strDrive)
                {
                    case "A:":
                        dnMyDrives.SelectedImageIndex = 0;
                        dnMyDrives.ImageIndex = 0;
                        break;
                    case "C:":
 
                        // The next statement causes the treeView1_AfterSelect Event to fire once on startup.
                        // This effect can be seen just after intial program load. C:\ node is selected
                        // Automatically on program load, expanding the C:\ treeView1 node.
                        treeView1.SelectedNode = dnMyDrives;
                        dnMyDrives.SelectedImageIndex = 1;
                        dnMyDrives.ImageIndex = 1;
 
                        break;
                    case "D:":
                        dnMyDrives.SelectedImageIndex = 2;
                        dnMyDrives.ImageIndex = 2;
                        break;
                    default:
                        dnMyDrives.SelectedImageIndex = 3;
                        dnMyDrives.ImageIndex = 3;
                        break;
                }
 
                treeView1.Nodes.Add(dnMyDrives);
            }
            treeView1.EndUpdate();
        }
 
        private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            // Get subdirectories from disk, add to treeView1 control
            AddDirectories(e.Node);
 
            // if node is collapsed, expand it. This allows single click to open folders.
            treeView1.SelectedNode.Expand();
 
            // Get files from disk, add to listView1 control
            AddFiles(e.Node.FullPath.ToString());
            toolStripStatusLabel1.Text = iDirectories.ToString() + " Папка(и)  " + iFiles.ToString() + " Файл(а)";
        }
 
        private void listView1_ItemActivate(object sender, System.EventArgs e)
        {
            try
            {
                string sPath = treeView1.SelectedNode.FullPath;
                string sFileName = listView1.FocusedItem.Text;
 
                Process.Start(sPath + "" + sFileName);
            }
            catch (Exception Exc) { MessageBox.Show(Exc.ToString()); }
        }
 
    }
Добавлено через 58 секунд
Вот фильтрация по dataGridView
C#
1
2
3
4
private void textBox5_TextChanged(object sender, EventArgs e)
        {
            (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name LIKE '%{0}%' or Description LIKE '%{0}%' or Tags LIKE '%{0}%'", textBox5.Text);
        }
Добавлено через 2 минуты
Только мне не нужно чтобы идентификатор файла получался по клику на dataGridView. Надо чтобы он получался просто по отсортированным записям

Добавлено через 23 секунды
Ну это я про 2 пункт что вы писали выше
0
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
03.11.2016, 11:48 10
SCAR101,
поскольку ваш treeview строится на основе файловой системы, то можно посоветовать хранить в .Tag полный путь к каталогу (предполагая, что он уникальный). Т.е. каталог можно однозначно идентифицировать по его полному пути.
Это для п.1:

C#
1
2
3
4
5
6
7
8
9
10
// Add the sub directories to the treeView1
                foreach (DirectoryInfo dir in dirs)
                {
                    iDirectories++;
                    TreeNode subNode = new TreeNode(dir.Name);
                    subNode.ImageIndex = 4;
                    subNode.SelectedImageIndex = 5;
                    subNode.Tag = dir.FullName; // сохранение полного пути каталога в свойстве .Tag
                    tnSubNode.Nodes.Add(subNode);
                }
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
10.11.2016, 07:50  [ТС] 11
Так хорошо, а как теперь с dataGreedView это связать ?
0
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
10.11.2016, 12:25 12
SCAR101, какие колонки выводятся в dataGridView?
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
14.11.2016, 17:22  [ТС] 13
Имя, Описание, Теги
0
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
15.11.2016, 09:45 14
Цитата Сообщение от SCAR101 Посмотреть сообщение
Имя, Описание, Теги
Что из этого является уникальным?
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
18.11.2016, 15:20  [ТС] 15
Имя
0
471 / 234 / 73
Регистрация: 25.05.2012
Сообщений: 1,054
Записей в блоге: 1
18.11.2016, 15:39 16
SCAR101, то есть не бывает двух файлов с одинаковым именем?
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
19.11.2016, 07:57  [ТС] 17
нет )
0
19.11.2016, 07:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2016, 07:57
Помогаю со студенческими работами здесь

Заполнение DataGridView по клику из TreeView
Господа, имеется Form1, на ней TreeView с несколькими узлами, +подключенный источник данных...

Перемещение элемента из treeView в datagridview
Доброе день всем. Помогите решить проблему работаю. на форме datagridview и treeView. treeView...

Загрузить данные из TreeView в dataGridView
Добрый день! подскажите есть корень в TreeView он будет постоянно с разным именем как сделать так...

Нажав на значение (строку) из одного DataGridView поиск в другом DataGridView
Всем привет. Есть 2 DataGridView в одном только дата, а во втором дата и много других столбиков....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru