Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
5 / 5 / 7
Регистрация: 31.03.2013
Сообщений: 228

TreeView и sql

25.08.2015, 06:31. Показов 1636. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Есть treeView. Есть таблица состоящая из столбцов idmenu,name, read_full
В idmenu это идентификатор меню, name имя меню и read_full это 0 или 1(чтение или полный доступ)
Надо сделать так


Вот таблица в бд


Гружу данные так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
var table = new DataTable();
                table.Load(command.ExecuteReader());
 
                if (table.Rows.Count > 0)
                {
                    treeView1.Nodes.Clear();
                    for (int i = 0; i < table.Rows.Count; i++)
                    {
                        TreeNode node = new TreeNode(table.Rows[i]["name"].ToString());
                        node.Nodes.Add(table.Rows[i]["read_full"].ToString());
                        treeView1.Nodes.Add(node);
                    }
                }
получается так
Название: Безымянный33.JPG
Просмотров: 121

Размер: 7.5 Кб
а как сделать чтоб было как на первой картинке пока не получается.
может кто нить что нибудь подскажет?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.08.2015, 06:31
Ответы с готовыми решениями:

Из sql в treeview
Есть следующая таблица в MS SQL. Задание - вывести эту таблицу в treeview 2 способами: с помощью sqlDataAdapter; с помощью Entity Framework.

Заполнение TreeView из MS SQL
Добрый день, возникла такая задача: Необходимо заполнить treeview из SQL (пример таблицы прикладываю) Суть заключается в том, что...

Заполнение TreeView из БД SQL
Здравствуйте, помогите пожалуйста чайнику:) В универе поставили задачу: заполнить компонент TreeView данными из базы данных. У меня...

7
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
25.08.2015, 09:59
Цитата Сообщение от blacl_cloak Посмотреть сообщение
а как сделать чтоб было как на первой картинке
У treeView Columns заполняли?
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,138
Записей в блоге: 1
25.08.2015, 10:00
blacl_cloak, внутри цикла создавайте 2 дочерних узла ("Полный доступ" и "Доступ на чтение") у каждого корневого узла и отмечайте чекбокс у нужного по значению в колонке "read_full".
Другой вопрос, что стандартный TreeView не умеет отображать чекбоксы лишь у некоторых узлов, а только у всех сразу
https://msdn.microsoft.com/ru-... .110).aspx
потребуется "доработка напильником"
0
5 / 5 / 7
Регистрация: 31.03.2013
Сообщений: 228
26.08.2015, 07:43  [ТС]
сделал так:
C#
1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < table.Rows.Count; i++)
                    {
                        TreeNode node = new TreeNode(table.Rows[i]["name"].ToString());
                        //node.Nodes.Add(table.Rows[i]["name"].ToString());
                        //string st = (table.Rows[i]["read_full"].ToString());
                        node.Nodes.Add("Полный доступ");
                        node.Nodes.Add("Доступ на чтение");
                            
                        treeView1.Nodes.Add(node);
                    }
Название: Безымянный44.JPG
Просмотров: 112

Размер: 13.7 Кб
как теперь сделать что если read_full будет true то будет галочка на полном доступе, а если false то на доступе на чтение.
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
26.08.2015, 09:19
Правил на лету, что бы донести саму суть:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TreeNode node = new TreeNode(table.Rows[i]["name"].ToString());
 
TreeNode fullAccess = new TreeNode();
fullAccess.Text = "Полный доступ";
 
TreeNode readAccess = new TreeNode();
readAccess.Text = "Доступ на чтение";
 
if(read_full)
    fullAccess.Checked = true;
else
    readAccess.Checked = true;
 
node.Nodes.Add(fullAccess);
node.Nodes.Add(readAccess);
                            
treeView1.Nodes.Add(node);
1
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,138
Записей в блоге: 1
26.08.2015, 10:00
blacl_cloak, tvv1, неудобства будет как минимум 2
1. Лишние чекбоксы на корневых узлах.
Checkbox в TreeView у конкретных узлов

2. По клику на дочерние чекбоксы потребуется реализация другого поведения, сходного с RadioButton (при выборе одного элемента остальные становятся "невыбранными")

Возможно, имеет смысл ограничиться одним дочерним узлом с чекбоксом, ведь по факту поле в таблице одно.
Если выбран - full access (соответствует "1" в таблице БД), если не выбран - read access ("0").
0
5 / 5 / 7
Регистрация: 31.03.2013
Сообщений: 228
28.08.2015, 07:26  [ТС]
с галочками разобрался, теперь вопрос в том как сделать 2 пункт, то есть, реализация другого поведения, сходного с RadioButton (при выборе одного первого чекбокса второй становится "невыбранным"
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,138
Записей в блоге: 1
28.08.2015, 11:26
blacl_cloak, думаю надо работать с событием

C#
1
treeView1.AfterCheck +=new TreeViewEventHandler(treeView1_AfterCheck);
на вскидку получилось не очень элегантно, но делает то что вам нужно с любым количеством дочерних чекбоксов

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
        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Parent != null)
            {
                if (e.Node.Checked && NodeCheckedItems(e.Node.Parent) > 1)
                {
                        UncheckAllNodes(e.Node.Parent);
                        e.Node.Checked = true;
                }
 
                if (!e.Node.Checked && NodeCheckedItems(e.Node.Parent) < 1)
                {
                    e.Node.Checked = true;
                }
            }
        }
 
        private int NodeCheckedItems(TreeNode node)
        {
            int result = 0;
 
            foreach (TreeNode n in node.Nodes)
            {
                if (n.Checked)
                    result++;
            }
            return result;
        }
 
        private void UncheckAllNodes(TreeNode node)
        {
            foreach (TreeNode n in node.Nodes)
            {
                n.Checked = false;
            }
        }
Но ИМХО это нарушает общепринятую логику поведения элементов интерфейса и может ввести пользователя в заблуждение.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.08.2015, 11:26
Помогаю со студенческими работами здесь

Заполнение treeview из sql
Ребят помогите пожалуйста облазил весь интернет , не как не могу понять!Есть у меня простенькая база данный , состоящая из одной таблицы...

TreeView & SQL
Доброго времени суток всем! Возможно задача вполне тривиальна, но я никак не могу с ней справится. Необходимо заполнить TreeView...

Элемент treeview и SQL база
Здравствуйте уважаемые форумчане! Я только начинаю разбираться с c# и вышла одна проблема. Хочу организовать визуальное движение по...

Считать SQL-выборку в TreeView
Здравствуйте. При написании работы возникла следующая проблема - мне необходимо считать выборку из трех таблиц в элемент TreeView. Таблицы...

Отображение sql дерева в TreeView
Добрый день! Еще недавно я создал тему в разделе ASP.NET MVC в которой я спрашивал как возможно отобразить дерево sql на страничке. Судя по...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru