Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/48: Рейтинг темы: голосов - 48, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 19

Нажатие на ветвь через Treeview и вывод в dataGridView

03.02.2013, 17:53. Показов 10328. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Есть форма подключенная к базе данных (Access). Слева на форме Treeview , справа dataGridView. На Treeview имеются корни и их ветви. Нужно чтобы при нажатии на на определенную ветвь запрашивалась информация с бд и выводилась на dataGridView. К примеру нажимаем на ветвь процессоры, с базы данных берется таблица процессоры и выводится в dataGridView. Знаю как вывести к примеру таблицу видеокарты на dataGridView, не знаю как такое организовать с Treeview. Если то, что я написал выше получится сделать, то возникает следующий вопрос. Как сделать ровно таблицу выведенную в dataGridView. Заранее спасибо за ответы.
Миниатюры
Нажатие на ветвь через Treeview и вывод в dataGridView  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.02.2013, 17:53
Ответы с готовыми решениями:

Treeview: нужно чтобы событие происходило если выбрана ветвь а не узел
Всем привет, возник вопрос, есть ли в treeview event по типу AfterSelect, только для ветви, мне нужно чтобы событие происходило если...

Не работает вывод textBox1 через метод. Только через нажатие button1_Click
Не работает вывод textBox1 через метод. Только через нажатие button1_Click НЕ РАБОТАЕТ public void svecha(string a) { ...

Не удаляется ветвь TreeView
Здравствуйте, уважаемые форумчане. Имеется дерево TreeContra при попытке удалить с него ветвь procedure...

13
60 / 60 / 17
Регистрация: 09.06.2009
Сообщений: 117
03.02.2013, 18:56
Может для каждого выбранного узла TreeView соответствующий запрос SQL .
что то вроде этого:
C#
1
2
3
4
5
switch (treeView1.SelectedNode.Name)
{
    case "видеокарты":
       запрос =  запрос_для_видеокарт ;
    break
;
1
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
04.02.2013, 08:21
Цитата Сообщение от TrueFeniks Посмотреть сообщение
Как сделать ровно таблицу выведенную в dataGridView
C#
1
dataGridView.AutoSizeColumnMode = DataGridViewAutoSizeColumnsMode.Fill;
Цитата Сообщение от TrueFeniks Посмотреть сообщение
Нужно чтобы при нажатии на на определенную ветвь запрашивалась информация с бд и выводилась на dataGridView.
C#
1
2
3
4
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
    RefreshDataGridView(e.Node); //метода RefreshDataGridView не существует, его нужно создать. e.Node - это выбранный узел. Этот метод должен будет в заисимости от выбранного узла запрашивать данные из необходимой вам табилцы БД
}
1
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 19
04.02.2013, 12:12  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
C#
1
dataGridView.AutoSizeColumnMode = DataGridViewAutoSizeColumnsMode.Fill;
Растягивание таблицы сделал, спасибо. а вот
C#
1
2
3
4
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
    RefreshDataGridView(e.Node); //метода RefreshDataGridView не существует, его нужно создать. e.Node - это выбранный узел. Этот метод должен будет в заисимости от выбранного узла запрашивать данные из необходимой вам табилцы БД
}
не очень понятно, если не сложно, сделайте какой-нибудь пример.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
04.02.2013, 19:12
Цитата Сообщение от TrueFeniks Посмотреть сообщение
не очень понятно, если не сложно, сделайте какой-нибудь пример.
Я не знаю, как у вас устроены данные. Смысл в том, что обновлять ДатаГрид нужно в событие AfterSelect. А вот как ... Это уже вам виднее.
1
45 / 47 / 4
Регистрация: 11.02.2010
Сообщений: 376
04.02.2013, 23:00
Все просто. Обработай событие AfterSelect
C#
1
2
3
4
5
6
7
8
9
private void treeViewAll_AfterSelect(object sender, TreeViewEventArgs e)
{
     if (e.Node.Text == "ПК")
     {
          dataGridView1.DataSource=Функция, которая считывает данные из базы. 
          // 
      }
 
}
и т.д и т.п.
Если непонятно, могу подробней потом
2
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 19
05.02.2013, 03:00  [ТС]
Цитата Сообщение от viktorrrr Посмотреть сообщение
Все просто. Обработай событие AfterSelect
C#
1
2
3
4
5
6
7
8
9
private void treeViewAll_AfterSelect(object sender, TreeViewEventArgs e)
{
     if (e.Node.Text == "ПК")
     {
          dataGridView1.DataSource=Функция, которая считывает данные из базы. 
          // 
      }
 
}
и т.д и т.п.
Если непонятно, могу подробней потом
Всё понятно, сделал с 1 раза. Спасибо большое за помощь.
0
45 / 47 / 4
Регистрация: 11.02.2010
Сообщений: 376
05.02.2013, 09:34
Цитата Сообщение от TrueFeniks Посмотреть сообщение
Как сделать ровно таблицу выведенную в dataGridView
Я делал так. Был отдельный класс, в котором функции, которыые возвращают определенное число. Ну ,или свойства только для чтения, К примеру, ReadPC() возвращает 1. В этом случае колонки должны так-то скомпоноваться, в другом случае по другому. Есть partial class в теле программы, в котором функции void, которые задают размеры DataGridView. а потом их просто подставляешь в нужное место(Еслил е.Ноде.Текст=ПК, то так-то должен выглядеть DataGridView)

НУ, можешь сразу подставлять размеры. ТУт уж как твоя фантазия. Главное, ведь как можно больше скрыть детали реализации
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
05.02.2013, 11:12
вам необходимо изучить ADO.NET для подключение к базе данных.
https://www.cyberforum.ru/ado-... 82279.html
https://www.cyberforum.ru/ado-... 42184.html
0
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 19
05.02.2013, 17:15  [ТС]
Как я написал выше, вывод информации в виде таблице с помощью dataGridView через Treeview теперь работает. Теперь возникла следующая проблема, сейчас попробую объяснить. Когда я нажимаю на кнопку добавить запись, у меня открывается новая форма , в которой я сделал выбор таблицы через combox, название, производитель (combox) , дата прихода (dateTimePicker) и numericUpDown. Вот сам код (пока только при условие что я выберу таблицу видеокарты).

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DS.mdb";
            OleDbConnection myConn = new OleDbConnection (connectionString);
            
            if (comboBox1.Text == "Видеокарты")
            {
                string query = ("INSERT INTO Видеокарты (Название, Производитель, Дата_прихода, Количество) VALUES ('" + textBox2.Text + "', '" + comboBox2.Text + "', '" + dateTimePicker1.Text + "', '" + numericUpDown1.TextAlign + "')");
                OleDbDataAdapter myCmd = new OleDbDataAdapter(query, myConn);
                DataSet ds = new DataSet();
                myCmd.Fill(ds, "Видеокарты");
 
            }
        }
Поле код товара я пропустил, потому что у него установлен тип данных счётчик. Сама проблема в том, что после добавление товара, корректно отображаются лишь 1 поле - это дата прихода. В счётчике почему-то вместо 2 стоит 4, в полях название и производитель вообще пусто, в поле количество что-то не понятное. Я пытался установить в базе данных количество - числовой, но при добавление товара появляется окно с ошибкой о несоответствие типов данных.
Миниатюры
Нажатие на ветвь через Treeview и вывод в dataGridView   Нажатие на ветвь через Treeview и вывод в dataGridView   Нажатие на ветвь через Treeview и вывод в dataGridView  

Нажатие на ветвь через Treeview и вывод в dataGridView  
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
05.02.2013, 18:19
для корректного обновления данных следует использовать следующий алгоритм:
1. Получаем данные из формы.
2. Создаем отдельную команду для занесения данных в бд и выполняем ее. Лучше пользоваться параметрами, а не вставлять данные в команду.
3. Очищаем таблицу - источник данных.
4. Заново считываем ее с бд.

метод Fill - служит для получения данных.
Для обновления данных служит метод Update, чтоб получить индентификатор в MsSql есть специальная команда @@IDENTITY и можно сразу со вставкой получить значение счетчика.
Как работать с Access не знаю, потому предложил рабочий вариант с повторной выборкой данных.
0
5 / 5 / 7
Регистрация: 31.03.2013
Сообщений: 228
31.03.2013, 18:11
Цитата Сообщение от TrueFeniks Посмотреть сообщение
Всё понятно, сделал с 1 раза. Спасибо большое за помощь.
Выложите плиз рабочий код этого, плиз!
0
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 19
31.03.2013, 18:23  [ТС]
Цитата Сообщение от blacl_cloak Посмотреть сообщение
Выложите плиз рабочий код этого, плиз!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// подключаем дерево к базе данных
 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DS.mdb");
            connection.Open();
            DataSet ds = new DataSet();
// делаем запрос к таблице видеокарты 
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM Видеокарты", connection);
   
 adapter.Fill(ds, "Видеокарты");
// если выбирают видеокарты
 if (e.Node.Text == "Видеокарты")
            {
// выводим в датагридвью
                dataGridView1.DataSource = ds.Tables["Видеокарты"].DefaultView;
0
5 / 5 / 7
Регистрация: 31.03.2013
Сообщений: 228
31.03.2013, 20:54
Спасибо большое!)

Добавлено через 1 час 19 минут
при нажатие на узел в treeview с помощью запроса в соседний datagridview выводятся например фамилия и имя. а теперь как при двойном щелчке на фамилию в datagridview сделать чтоб открывалась новая форма с гридом в котором будет содержаться полная информация о человеке?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2013, 20:54
Помогаю со студенческими работами здесь

Программно раскрыть ветвь TreeView
Суть вопроса: формирую дерево, пользователь может добавлять в него новые ветки, хочу когда вкатка добавлена раскрыть родительскую, чтоб...

Как связать ветвь в TreeView с записью в БД
Подскажите, пожалуйста, дописываю диплом, осталось доделать буквально пару последних моментов, но абсолютно не знаю как сделать((( Во...

Открытие файла по клику на ветвь Treeview
Необходимо чтобы при клике на ветвь открывался соответствующий файл. Вот написал следующее, но компилятору не нравится. FILE* f1 =...

Мастер-страница и TreeView: Как после перезагрузки страницы программно открыть соответствующую родительскую ветвь
В мастер-странице имеется TreeView у которого вместо надписей картинки кнопок. Поэтому пришлось убрать свойства Text и Value. Рядом с...

Бинарное дерево - Просмотр дерева в следующем порядке: узел, левая ветвь, правая ветвь
3. Разработать программу работы с бинарным деревом. Программа должна содержать следующие процедуры, вызываемые из меню: - построение...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru