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

Биндинг DataGrid

07.05.2024, 18:30. Показов 3819. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Не могу разобраться с привязкой данных в элементе DataGrid...

У меня есть следующие классы:
1) Корпуса
C#
1
2
3
4
5
6
7
8
9
10
11
public class Корпуса
{
    //public Корпус()
    //{
    //    this.Кабинет = new HashSet<Кабинет>();
    //}
 
    public int Код_корпуса { get; set; }
    public string Адрес { get; set; }
    public virtual ICollection<Кабинеты>? Кабинеты { get; set; }
}
2) Кабинеты
C#
1
2
3
4
5
6
7
8
9
public class Кабинеты
{
    public int Код_кабинета { get; set; }
    public int Номер_кабинета { get; set; }
    public int Количество_рабочих_мест { get; set; }
    public int Код_корпуса { get; set; }
    public virtual Корпуса Корпуса { get; set; }
 
}
Также есть 2 формы: на 1 форме я выбираю интересующий меня корпус, а на 2 форме отображаются все те кабинеты, которые находятся в нем

Код разметки ДатаГрида 2 окна, в котором я хочу получить: номер кабинета, кол-во рабочих мест и адрес корпуса, в котором расположен тот или иной кабинет
XML
1
2
3
4
5
6
7
<DataGrid x:Name="DG" AutoGenerateColumns="False" Margin="162,60,162,85">
    <DataGrid.Columns>
        <DataGridTextColumn Header="№ кабинета" Binding="{Binding Номер_кабинета}"/>
        <DataGridTextColumn Header="Кол-во рабочих мест" Binding="{Binding Количество_рабочих_мест}"/>
        <DataGridTextColumn Header="Адрес корпуса" Width="*" Binding="{Binding корпуса.Адрес}"/> //проблема в этой части
    </DataGrid.Columns>
</DataGrid>
Код метода для заполнения (получается так, что с 1 формы на 2 я передаю только код выбранного корпуса (переменная getSelectedCorpus )):
C#
1
2
3
4
5
6
7
8
private async void GetCorpuses()
{
    var responseCorp = await client.GetStringAsync("корпуса");
    var responseCab = await client.GetStringAsync("кабинеты");
    var кабинеты = JsonConvert.DeserializeObject<List<Кабинеты>>(responseCab);
    var корпуса = JsonConvert.DeserializeObject<List<Корпуса>>(responseCorp).Where(p => p.Код_корпуса == getSelectedCorpus); //getSelectedCorpus - переменная, которая получает код выбранного корпуса с 1ой формы
    DG.ItemsSource = кабинеты.Where(p => p.Код_корпуса == getSelectedCorpus).ToList();
}
Вопрос, думаю, понятен по комментариям, но лучше продублирую: подскажите пожалуйста, как мне заполнить последний столбец (Адрес корпуса), используя Binding, чтобы выводился адрес выбранного корпуса для каждой записи кабинета в таблице
Я только начал изучать АПИ и взаимодействие с данными, полученными в результате парсинга, поэтому действую по аналогии работы с EntityFramework (когда добавляется модель напрямую в проект и уже по связям можно взаимодействовать с таблицами)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2024, 18:30
Ответы с готовыми решениями:

Биндинг в DataGrid не обновляет данные
Когда меняю значение у ком бокса и проверяю Перечень2, а он как был false так и остался при проверке точки остановки видно что в class...

Биндинг коллекции объектов к DataGrid
Здравствуйте. Собственно есть структура: namespace SingleParameterOptimization { public struct ResultData { ...

Биндинг TextBox и столбца DataGrid
Подскажите, пожалуйста, каким образом можно привязать TextBox к столбцу DataGrid, таким образом, чтоб при позиционировании на строке...

52
0 / 0 / 0
Регистрация: 16.02.2022
Сообщений: 69
08.05.2024, 22:33  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вот не пойму зачем эта таблица.
Ведь оборудование может быть только в одном месте. Оно не может одновременно в двух местах.
Так есть же связь. В 1 кабинете может находиться различное оборудование

Добавлено через 28 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вот это без хранимки не проконтролируешь.
Подскажите пожалуйста как тут преобразовать. У меня в классе Заявки_на_ремонт хранится Код_заявки, Код_оборудование_кабинета и Дата_создания
В классе Оборудование_кабинета хранится Код_оборудование_кабинета, Код_кабинета, Код_оборудования
В классе Кабинеты есть Код_корпуса
Вот код метода контроллера для получения записей Оборудование_кабинета по коду корпуса, где Код_кабинета это поле, содержащее Код_кабинета из класса Кабинеты, в котором хранится и код корпуса
C#
1
2
3
4
public IQueryable<Оборудование_кабинета> GetОборудованиеКабинетаКорпуса(int id)
{
    return db.Оборудование_кабинета.Where(p => p.Кабинеты.Код_корпуса == id);
}
Получается так, что я указываю интересующий код корпуса, а в ответ получаю коллекцию из класса Оборудование_кабинета, в котором значения поля Код_кабинета относятся к указанному корпусу

А как мне теперь сделать так, чтобы я мог получить список Заявки_на_ремонт, сравнивая полученный список из класса Оборудование_кабинета с Заявками_на_ремонт по полю Код_оборудование_кабинета?

Пытаюсь вот таким образом, но не выходит...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var response = await client.GetStringAsync("корпуса");
var корпуса = JsonConvert.DeserializeObject<List<Корпуса>>(response);
codeOfCorpus = корпуса.Where(p => p.Адрес == cmbCorpuses.Text).Select(p => p.Код_корпуса).FirstOrDefault();
 
var responseEquipmentCabOfCorpus = await client.GetStringAsync("GetОборудованиеКабинетаКорпуса?id=" + codeOfCorpus);
var техникаКабинетовВыбранногоКорпуса = JsonConvert.DeserializeObject<List<Техника_в_кабинетах>>(responseEquipmentCabOfCorpus);//тут получение как раз, все работает
 
//а вот тут уже беда...
        private async Task GetOrdersOfCorpus(int id)
        {
            var responseEquipmentCabOfCorpus = await client.GetStringAsync("GetТехникаКабинетаКорпуса?id=" + codeOfCorpus);
            var техникаКабинетовВыбранногоКорпуса = JsonConvert.DeserializeObject<List<Техника_в_кабинетах>>(responseEquipmentCabOfCorpus);
 
            var responseOrders = await client.GetStringAsync("GetЗаявкиКабинетаКорпуса");
            var заявкиКорпуса = JsonConvert.DeserializeObject<List<Заявки_на_ремонт>>(responseOrders).Where(p => p.Код_техники_в_кабинете == техникаКабинетовВыбранногоКорпуса);
Метод контроллера:
C#
1
2
3
4
5
public IQueryable<Заявки_на_ремонт> GetЗаявкиКабинетаКорпуса(Оборудование_кабинета оборудование_кабинета)
{
    
    return db.Заявки_на_ремонт.Include(p => p.Код_оборудование_кабинета == оборудование_кабинета.Код_оборудования_кабинета);
}
Добавлено через 7 минут
Как из полученного списка
C#
1
var техникаКабинетовВыбранногоКорпуса = JsonConvert.DeserializeObject<List<Техника_в_кабинетах>>(responseEquipmentCabOfCorpus);
получить список конкретных значений, чтобы я смог выполнить вот это вот
C#
1
2
var responseOrders = await client.GetStringAsync("GetЗаявкиКабинетаКорпуса");
var заявкиКорпуса = JsonConvert.DeserializeObject<List<Заявки_на_ремонт>>(responseOrders).Where(p => p.Код_техники_в_кабинете == техникаКабинетовВыбранногоКорпуса);
Используется этот метод, я уже накрутил так, что сейчас он неправильный, помогите пожалуйста исправить на нужное.
C#
1
2
3
4
5
public IQueryable<Заявки_на_ремонт> GetЗаявкиКабинетаКорпуса(Оборудование_кабинета оборудование_кабинета)
{
    
    return db.Заявки_на_ремонт.Include(p => p.Код_оборудование_кабинета == оборудование_кабинета.Код_оборудования_кабинета);
}
я хочу сделать так, чтобы в результате вызова этого метода выводился список, где выполняется условие метода (там несколько элементов)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
08.05.2024, 22:47
Цитата Сообщение от ProgNew Посмотреть сообщение
В 1 кабинете может находиться различное оборудование
Но одно оборудование не может находится в нескольких местах. Это связь "1 кабинет - много мест" и "1 место - 1 оборудование".
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
08.05.2024, 22:49
Цитата Сообщение от ProgNew Посмотреть сообщение
Подскажите пожалуйста как тут преобразовать.
Вот создал образец БД.
Посмотрите его.
Вложения
Тип файла: zip equipmentDb.zip (916 байт, 5 просмотров)
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
09.05.2024, 01:36
Вот не помню уже как вывести графически схему бд.
давно с Бд не работал.

Добавлено через 2 часа 44 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
создал образец БД.
Если используете EF, то создавать БД лучше используя Code First.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
09.05.2024, 20:53
ProgNew, сделал не большой пример по добавлению\получению с апи корпусов и кабинетов. Для оборудования и заявок на ремонт все действия те же самые полностью. Следовательно чтобы закончить вопрос по этому поводу вам нужно изучить Связь один-к-одному и Связь один ко многим без понимания как это работает и что делает и для чего, вы не сможете разобраться ни в примере, ни закончить свое приложение.
Получение кабинетов сделал по id в зависимости от того что выбрано в datagrid. Сделал не большую обработку для данных и уведомлений о результате.
Пример вышел простой, миграции для бд не используются, связи с навигационными свойствами. Ранее вам показали пример бд без навигационных свойств. Но мне кажется чтобы понимать как работать с id без навигационных свойств, лучше изучить для чего они нужны, а потом отказываться от навигационных свойств.

Чтобы брать данные со связями я ранее писал пример.
Для изучения Загрузка связанных данных. Метод Include
В примере я не использовал работу получением связанных данных. А брал их выборочно.
Возможные проблемы для работы это если вы загрузите тысячи элементов для списка. Тогда api или ui будут лагать.
Для этого можно использовать пагинацию для view, а с сервера выборочно брать данные к примеру 0-100 элементов, 100-200 элементов.

Теперь вам нужно изучить все что я указал по ссылкам и затем сможете разобраться в примере и доделать то что осталось.
Полностью за вас никто делать не будет, но с вопросами помощью многие готовы помочь.
SampleApiToApp.rar
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
09.05.2024, 20:56
Также обратите что NewJson не используется ни для приложения, ни для api. В классе Program в проекте api указано
C#
1
2
3
4
builder.Services.AddControllers().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
});
Это убирает цикличною зависимость которая появляется из за навигационных свойств. Без это классы рекурсивно будут ссылаться друг на друга и json не сможет создаться и будет ошибка
0
0 / 0 / 0
Регистрация: 16.02.2022
Сообщений: 69
11.05.2024, 11:23  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
Теперь вам нужно изучить все что я указал по ссылкам
Большое спасибо за оказанную консультацию и практический пример!
Ознакомился с проектом уже, в общем и целом - многое совпадает, но для себя нашел на что стоит обратить внимание...
Благодарю!!!

Добавлено через 53 секунды
Цитата Сообщение от xellan24rus Посмотреть сообщение
Это убирает цикличною зависимость которая появляется из за навигационных свойств. Без это классы рекурсивно будут ссылаться друг на друга и json не сможет создаться и будет ошибка
У меня немного другой вариант обхода этой системы:
C#
1
2
3
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.JsonFormatter.SerializerSettings = new Newtonsoft.Json.JsonSerializerSettings();
Добавлено через 2 минуты
Цитата Сообщение от xellan24rus Посмотреть сообщение
вопросами помощью многие готовы помочь.
А подскажите еще разницу между Веб-приложением ASP.NET (Entity Framework) и Web-API ASP.NET Core
Ведь и там, и там, можно создать веб апи, но в первом случае доступно добавление классов на основе сущностей модели ADO.NET
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
11.05.2024, 14:51
Цитата Сообщение от ProgNew Посмотреть сообщение
Ознакомился с проектом уже, в общем и целом - многое совпадает
Делал пример на основе вашего кода, без кода который вы бы не поняли. Поэтому там все на уровне базы.
Цитата Сообщение от ProgNew Посмотреть сообщение
У меня немного другой вариант обхода этой системы:
вы использовали NewJsonSoft там есть то что отличается. Asp проект легко настроить на работу с NewJsonSoft. Но в этом нет нужды. Стандартные средства хороши.
Цитата Сообщение от ProgNew Посмотреть сообщение
А подскажите еще разницу между Веб-приложением ASP.NET (Entity Framework) и Web-API ASP.NET Core
Ведь и там, и там, можно создать веб апи, но в первом случае доступно добавление классов на основе сущностей модели ADO.NET
Веб приложение больше подходит для работы с view частью. Для созданий сайтов.
Веб апи как правило используется только для разворачивания апи.
Цитата Сообщение от ProgNew Посмотреть сообщение
но в первом случае доступно добавление классов на основе сущностей модели ADO.NET
В веб апи это тоже доступно. Создаете контролер выбираете модели, сущность и генерируется код.
Это доступно и там и там.
0
0 / 0 / 0
Регистрация: 16.02.2022
Сообщений: 69
11.05.2024, 15:08  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
В веб апи это тоже доступно. Создаете контролер выбираете модели, сущность и генерируется код.
Это доступно и там и там.
В веб апи я не смог найти как добавить классы, а при добавлении контроллеров выдает ошибку(
А в веб приложении я и классы по модели смог добавить, и контроллеры на их основании
А вообще принципиально где апи написано? Или есть какие-то определенные критерии, по которым могут сказать, что вот это не подходит, так нельзя и тд? Про обоснование выбора веб-апи и веб-приложения
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
11.05.2024, 16:02
Цитата Сообщение от ProgNew Посмотреть сообщение
а при добавлении контроллеров выдает ошибку(
Так с контекстом.

А на выбор такое. Использую только последнее

Цитата Сообщение от ProgNew Посмотреть сообщение
а при добавлении контроллеров выдает ошибку(
Если с контекстом, то указать все надо и ошибок нету. Если пустой, то ошибок вообще не должно быть.
Цитата Сообщение от ProgNew Посмотреть сообщение
А вообще принципиально где апи написано? Или есть какие-то определенные критерии, по которым могут сказать, что вот это не подходит, так нельзя и тд? Про обоснование выбора веб-апи и веб-приложения
Если вам надо только апи, то веб приложение точно не нужно.
А ответы на запросы хоть где можно написать. И веб приложение есть контролеры, маршрутизация и веб апи так же.
0
0 / 0 / 0
Регистрация: 16.02.2022
Сообщений: 69
11.05.2024, 23:14  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
Если с контекстом, то указать все надо и ошибок нету. Если пустой, то ошибок вообще не должно быть.
Я перепутал похоже... Классы на основании бд не могу подключить
UPD: классы подключил с помощью Scaffold-DbContext
Но теперь беда - не могу контроллеры создать. Контроллер... -> API -> Добавить контроллер API с действиями, использующими EntityFramework -> Ошибка "При запуске выбранного генератора кода произошла ошибка: "Exception of type "System.InvalidOperatioException" was thrown."
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
12.05.2024, 10:15
ProgNew, не пользуюсь кодогенератором. С этим помочь не могу.
0
0 / 0 / 0
Регистрация: 16.02.2022
Сообщений: 69
12.05.2024, 13:30  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
не пользуюсь кодогенератором. С этим помочь не могу.
Тоже так и не разобрался в ошибке, поэтому приступил к "ручной генерации"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2024, 13:30

Биндинг в HeaderTemplate для DataGrid (WPF)
Есть компонент Combobox с возможностью множественного выбора. Если его просто поместить на форму &lt;control:MultiSelectComboBox...

Подскажите как можно сделать биндинг элемента внутри DataGrid к полю из вью модели?
Добрый день, Хочу сделать форму с DataGrid с фильтрами в столбцах. Проблема заключается что я не могу прибиндить textbox с фильтром к...

DataGrid: установить фокус на строку DataGrid, а не на сам DataGrid
Добрый день! Есть следующий код: public partial class MainWindow : Window { DataTable dt = new DataTable(); ...

Как зеркально отобразить dataGrid одного окна в dataGrid в другом окне?
Здравствуйте. Столкнулся с проблемой. Не знаю, как отобразить зеркально dataGrid одного окна, в dataGrid другого окна? Возможно ли...

Удалить выбранную строку в DataGrid, если DataGrid содержит коллекцию
Здравствуйте! Скажите пожалуйсто, как удалить выбраную строку в DataGrid, если DataGrid содержит коллекцию. пример выражения: //Метод ...


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

Или воспользуйтесь поиском по форуму:
53
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru