Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
WPF

Заполнение вкладок TabItem данными из БД WPF

03.05.2021, 21:07. Показов 9020. Ответов 66

Студворк — интернет-сервис помощи студентам
Опирался на пост Вывод данных из БД в разные TabItem
Допустим, есть база данных с таблицами "Уровень", "Вопросы", "Теория" и "Главы", связи все настроил. Также есть проект WPF с окном, на котором расположены два TabItem'а, на которых располагаются поочередно теория и вопросы к ней. Допустим, человек выбирает какую-нибудь главу, к которой в бд относятся какая-нибудь теория и вопросы к ней. Ему выводится теория на первой вкладке, а за ней на второй (или условно третьей и четвертой) отображаются задания. Была мысль выводить теорию с помощью элемента WebBrowser, просто открывая различные html страницы, однако вариант с бд кажется интереснее. Если есть какие-либо замечания по спроектированной базе данных - буду рад выслушать!

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2021, 21:07
Ответы с готовыми решениями:

Переключение вкладок в tabcontrol при клике на элемент внутри tabitem
Есть tabcontrol и в каждом tabitem имеется textbox и colorpicker, если ткнуть в colorpicker, то откроется компонент выбора цвета, но...

Wpf скрыть TabItem у TabControl
хочу скрыть один таб итем. указываю <TabControl Grid.Row="0"> <TabItem Visibility="Hidden"> скрывается только кнопка...

WPF Custom TabItem in TabControl - UserControl vs ControlTemplate (DataTemplate)
В моем приложении будут динамически добавляться вкладки в TabControl и динамически удаляться. Для этого хочу добавить в заголовок вкладки...

66
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
17.05.2021, 21:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от kMOD Посмотреть сообщение
То есть, получается, что у нас еще не до конца доделанная версия?
Нет.
Нужен навигатор который будет страницы переключать.
И ViewModel тоже ещё не реализована.

Добавлено через 16 минут
kMOD, сделал фиксацию:
Добавлены Навигатор и ViewModel
Завтра, наверное, закончу.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
18.05.2021, 18:15
kMOD, сделал фиксацию:
Реализация закончена.
Нужно отладить с БД.
Добавлено через 3 минуты
Я отключил миграцию.
Надо её подключить, но в этой теме я ещё не разбирался.

Добавлено через 2 минуты
Не могу понять почему БД не пересоздаётся.

Добавлено через 1 час 12 минут
Varyna, а точно достаточно пакетов NuGet только в проекте Модели?
В основном (запускаемом) проекте Решении они не нужны?

Ошибка возникает сразу при попытке доступа к БД.
0
78 / 67 / 13
Регистрация: 04.10.2018
Сообщений: 330
18.05.2021, 19:02
Элд Хасп, Сейчас проверю.

Добавлено через 12 минут
Элд Хасп, Вот так.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 public class ApplicationContext : DbContext
    {
        public ApplicationContext()
        {
            Database.EnsureCreated();
        }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {           
            optionsBuilder.UseSqlite("Filename=MyDatabase.db");           
        }
        public DbSet<Level> Level { get; set; }
        public DbSet<LevelDescriptor> LevelsDescriptors { get; set; }
        public DbSet<Question> Questions { get; set; }
        public DbSet<QuestionAnswer> QuestionsAnswers { get; set; }
        public DbSet<QuestionDescriptor> QuestionsDescriptors { get; set; }
    }

C#
1
2
3
4
5
6
7
8
9
10
11
    public IEnumerable<(int id, string title)> GetAllLevels()
        {
            using (ApplicationContext context = new ApplicationContext())
            {
                return context.Level
              .ToList()
              .Select(lvl => (id: lvl.Id, title: lvl.Title ?? string.Empty))
              .ToList()
              .AsReadOnly();
            }
        }
Добавлено через 24 минуты
Почему то пустую таблицу выводит. Я сделал вот так.
Class DbContext
C#
1
2
3
4
5
6
7
8
9
10
11
 public class ApplicationContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder options)
           => options.UseSqlite("Data Source=MyDatabase.db");
        
        public DbSet<Level> Level { get; set; }
        public DbSet<LevelDescriptor> LevelsDescriptors { get; set; }
        public DbSet<Question> Questions { get; set; }
        public DbSet<QuestionAnswer> QuestionsAnswers { get; set; }
        public DbSet<QuestionDescriptor> QuestionsDescriptors { get; set; }
    }
Далее команды add-migration CreateDb => update-database
Потом добавил запись в бд и вывел.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 public IEnumerable<(int id, string title)> GetAllLevels()
        {
            using (ApplicationContext context = new ApplicationContext())
            {
                context.Level.Add(new ModelEntity.Model.Level{Id = 1, Title = "123" });
                context.SaveChanges();
                return context.Level
              .ToList()
              .Select(lvl => (id: lvl.Id, title: lvl.Title ?? string.Empty))
              .ToList()
              .AsReadOnly();
            }
        }
При перезагрузки проекта данные остаются. Бд находится ExampleDB-master\TabItem\bin\Debug\net5.0-windows MyDatabase.db
2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
18.05.2021, 21:15
Цитата Сообщение от Varyna Посмотреть сообщение
При перезагрузки проекта данные остаются. Бд находится ExampleDB-master\TabItem\bin\Debug\net5.0-windows MyDatabase.db
Сенк ю!
Сейчас посмотрю.

Добавлено через 9 минут
Varyna, вы фиксацию делали?
В Репе никаких изменений.

Добавлено через 43 минуты
Varyna, перенёс с поста - заработало.
Но привязки почему-то перестали работаь.
Разбираюсь.

Добавлено через 10 минут
Varyna, случайно в XAML лишнюю букву нажал в имени свойства привязки.

kMOD, сделал фиксацию:
Всё работает и отлажено.
Задана тестовая БД на два уровня по два вопроса.
0
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
18.05.2021, 21:38  [ТС]
Элд Хасп, Varyna, Спасибо Вам огромное за помощь!! Ух, проект весьма серьезный вышел, много чего нового для себя узнаю
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
19.05.2021, 08:17
Цитата Сообщение от kMOD Посмотреть сообщение
проект весьма серьезный вышел
Реализовано гораздо шире первоначальной задачи:
1) Пять таблиц вместо двух. Для данной задачи это избыточно.
Сделано так для того чтобы продемонстрировать как Модель работает с Репозиторием.

2) "Ленивая" загрузка только тех данных, что визуализируются.
Это тоже избыточно, но для обучения полезно.

3) Навигатор для управления страницами в Окне.

4) В навигаторе два способа управления Представлением: Непосредственное задание значений для Представления (Название кнопки навигации) и изменение свойства-ключа по которому Представление само настраивается (тип страницы по которому триггерами выбирается нужный UserControl).
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
19.05.2021, 14:10
Цитата Сообщение от Элд Хасп Посмотреть сообщение
2) "Ленивая" загрузка только тех данных, что визуализируются.
Это тоже избыточно, но для обучения полезно.
kMOD, для ясности.
"Ленивая" загрузка реализована для Описателей Уровня и Вопроса.
Свойство Descriptor изначально пустое (null).
Его значение загружается после первого обращения к этому свойству.

То есть элементов много (LevelVM и QuestionVM).
При первоначальном их выводе достаточно только их свойства Title: для уровней оно выводится в ListBox, для вопросов - в заголовках вкладок.
А Descriptor загружается только после выбора элемента (строки ListBox или вкладки).

Ради одного свойства так делать не стоит, так как это практически не сказывается на скорости работы.
Но если подгружаемых данных много и они объёмны, это позволяет быстро вывести список с основным свойством. (свести лаги GUI к минимуму).
Именно для этого пришлось разделить две таблица на пять.
По одной таблице для основного свойства и таблицы для дополнительной информации.

Цитата Сообщение от kMOD Посмотреть сообщение
проект весьма серьезный вышел
И ещё один пункт отсутствующий в первоначальной задаче:
5) Реализован Контекст Данных Времени Разработки.
При "серьёзном" (большом, сложном) GUI без такого Контекста будет очень трудно создавать и отлаживать WPF GUI.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.05.2021, 14:10

Наведение курсора на TabItem и как менять фон при нажатии на другой TabItem
Здравствуйте, у меня возникла проблема с TabItem, то есть при наведении TabItem с помощью триггера: &lt;Trigger...

Программное создание tabItem по образцу другого tabItem с контролами
Добрый вечер, уважаемые форумчане! На форме существует tabControl1. В нём уже существует tabItem1 с некими компонентами, там label1...

Автоматическое заполнение ячеек данными, взятыми из одной ячейки с динамическими данными
Добрый день! Подскажите, есть ли решение моей задачи: В одной и той же ячейке постоянно (ежесекундно) меняется число (данные...

Drop drag wpf перетаскивание вкладок ошибка
Выдает ошибку Операция недопустима, когда ItemsSource используется. Вместо этого получите доступ и измените элементы с помощью...

Таб контроль: заполнение вкладок и их создание по заданному набору названий
Доброго времени суток! В проекте использую таб контрол и вот такой текст срабатывает. TC_ITEM TabItem; TabItem.mask =...


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

Или воспользуйтесь поиском по форуму:
67
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru