Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930

Автоматическое сопоставление свойства класса с элементом коллекции классов

16.02.2020, 19:02. Показов 1750. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Сразу извиняюсь за корявое название темы. Сложно сформулировать кратко то, что хочу.
Есть БД с которой работаю через Entity Framework. В нужной мне таблице есть поле, хранящее целое число, которое в коде сопоставляется с одним из элементов ридонли коллекции:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        public class EquipType
        {
            public int? type_id { get; set; }
            public string Description { get; set; }
 
            public override string ToString()
            {
                return Description;
            }               
        }
 
        public readonly EquipType[] equipTypes = new EquipType[]
        {
            new EquipType{ type_id = null, Description = "Не определено"},
            new EquipType{ type_id = 0, Description = "Средства измерения"},
            new EquipType{ type_id = 1, Description = "Испытательное оборудование"},
            new EquipType{ type_id = 2, Description = "Вспомогательное оборудование"},
        };
Сделано:
1) Организовать обмен с БД чтение/запись, включая это поле
Сделал свойство в классе типа int?, которое мапится на соответствующее поле таблицы.
C#
1
2
        [DisplayName("Тип оборудования")]
        public int? type_id { get; set; }
2) В винформ нарисовал DataGridView, в котором отображаю и редактирую данные. Сделал через BindingSource для которого DataSource указал класс данных получаемых из БД.

3) В таблице винформы тип ячеек в которые биндится нужное мне свойство указал типа ComboBox

4) В классе данных создал свойство без сеттера:
C#
1
2
        [NotMapped]
        public EquipType[] t_collections { get { return equipTypes; } }
И мапплю его в винформ таблицу в качестве заполнителя итемов Combobox.

Вот тут и начинаются проблемы. Item из Combobox не может автоматически сопоставиться с типом поля (int?)
А если заменяю свойство на EquipType, то оно перестаёт маппиться в БД.

Не могу даже кратко корректно сформулировать проблему, чтобы загуглить.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2020, 19:02
Ответы с готовыми решениями:

Как получить свойства классов, которые находятся в коллекции
Здравствуйте. Извините, если тему назвал некорректно. Свой класс. Экземпляры объеденены в коллекцию. Public Class Form1 Private...

Биндинг свойства контрола к одной из переменных свойства класса
Добрый день. У меня есть вопрос по биндингу. Ситуация следующая: У меня есть структура, которой содержится несколько переменных....

Вызов метода являющегося элементом коллекции
Есть коллекция методов List<object> objects = new List<object>(); objects.Add(new Action(() => SendKeys.Send("{TAB}"))); Пытаемся...

11
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
17.02.2020, 05:48
.. сделайте в таблице нормальный Id (NOT NULL), и его замапливайте.. не надо NULL в качестве ключа вставлять...
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
17.02.2020, 07:20  [ТС]
Цитата Сообщение от carrotik Посмотреть сообщение
.. сделайте в таблице нормальный Id (NOT NULL), и его замапливайте.. не надо NULL в качестве ключа вставлять...
Во-первых, оффтоп.
Во-вторых, вообще никакой разницы nullable или not nullable тип.
В-третьих, спасибо за участие )
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
17.02.2020, 09:03
Цитата Сообщение от aquaMakc Посмотреть сообщение
Вот тут и начинаются проблемы. Item из Combobox не может автоматически сопоставиться с типом поля (int?)
А он точно должен автоматически сопоставляться? БиндингСурс только набор данных для элемента, а состояние это вроде бы другое действие. Вы не хотите просто устанавливать текущий выбор через .SelectItem или .SelectIndex? Помоему это нормальный подход.
0
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
17.02.2020, 09:46
А смысл вообще винформами пользоваться? В WPF интереснее
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
17.02.2020, 11:11  [ТС]
Цитата Сообщение от yurickas Посмотреть сообщение
А смысл вообще винформами пользоваться? В WPF интереснее
Есть много вещей интереснее. Но делать надо именно в формах. Да и разницы нет принципиальной, влияющей на озвученную проблему.

Добавлено через 22 секунды
Цитата Сообщение от HF Посмотреть сообщение
Вы не хотите просто устанавливать текущий выбор через .SelectItem или .SelectIndex?
Нет.
0
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
17.02.2020, 16:03
Цитата Сообщение от aquaMakc Посмотреть сообщение
влияющей на озвученную проблему.
В WPF я бы тут даже проблемы не увидел.
1. создается ObservableCollection<EquipType> которая делается как DependencyProperty
2. В xaml биндится ComboBox и обрабатываем routed event SelectionChanged.

все.
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
17.02.2020, 17:20
Лучший ответ Сообщение было отмечено aquaMakc как решение

Решение

Не по теме:

Цитата Сообщение от yurickas Посмотреть сообщение
А смысл вообще винформами пользоваться? В WPF интереснее
а смысл поддерживать легаси, давайте создадим новый лучший мир заново :)



aquaMakc, почему не используете enum?
как происходит попытка связи с комбобоксом? DisplayMember, ValueMember пробовали задавать?

т.е сделать что-то вроде такого:
C#
1
2
3
4
5
6
7
var bindingSource = new BindingSource();
bindingSource.DataSource = t_collections;
 
comboBox.DataSource = bindingSource.DataSource;
 
comboBox.DisplayMember = "Description";
comboBox.ValueMember = "type_id";
сейчас нет возможности конечно проверить работоспособность такого подхода, но вполне может быть что подойдёт, если я конечно правильно понял что вы делаете вообще.
1
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
17.02.2020, 17:32  [ТС]
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
почему не используете enum?
Лишний уровень абстракции. Потом, может понадобится енум, но пока достаточно просто интов.
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
как происходит попытка связи с комбобоксом? DisplayMember, ValueMember пробовали задавать?
Надо попробовать.
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
17.02.2020, 18:39
Цитата Сообщение от aquaMakc Посмотреть сообщение
Надо попробовать.
ЭЭээммм.... А как тогда до этого делали? Что, интересно, отображалось после биндинга?
Я даже не стал и спрашивать, считал что вы такой очень уверенный, значит всё сделали правильно.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
18.02.2020, 09:16  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
А как тогда до этого делали?
Я напроч забыл про ValueMember. DataSource присвоил. DisplayMember указал, а Value - нет. По идее с ValueMember всё должно заработать, пока не могу добраться до кода, чтобы проверить.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
18.02.2020, 21:00  [ТС]
Да, доведя до ума биндинг на поле таблицы решил беду. Выглядит это вот так:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2020, 21:00
Помогаю со студенческими работами здесь

Erase для массива, являющегося элементом коллекции
Некоторое дополнение к предыдущей теме &quot;Присвоение значения элементу коллекции Col.Item(N)(2) = 34&quot;. Суть проблемы в том, что после...

Автоматическое заполнение коллекции ComboBox из столбца БД уникальными значениями
Приветствую Вас Друзья подскажите пожалуйста. Этим кодом Dim com As New OleDbCommand(&quot;select Столбец from Название таблицы&quot;, conn)...

Количество элементов коллекции с уникальным значением свойства
Добрый день! Например, есть класс public class SomeClass { public int A {get; set;} } Есть коллекция экземпляров...

Коллекция созданная из класса в коллекции из класса
Разбираюсь с C#, для практики решил написать просто приложение: на форме (WPF) есть 2-ва ListView, в правом находится список людей (Имя и...

Обращение к элементам класса (поставив точку, показать свойства и методы класса)
Есть класс Audio, у него есть две основных задачи воспроизводить и записывать звук (Recorder/Player). Хотелось бы, что бы все методы и...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru