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

Биндинг DataGrid

07.05.2024, 18:30. Показов 3494. Ответов 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
 Аватар для Элд Хасп
16118 / 11239 / 2887
Регистрация: 21.04.2018
Сообщений: 33,041
Записей в блоге: 2
08.05.2024, 22:47
Цитата Сообщение от ProgNew Посмотреть сообщение
В 1 кабинете может находиться различное оборудование
Но одно оборудование не может находится в нескольких местах. Это связь "1 кабинет - много мест" и "1 место - 1 оборудование".
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16118 / 11239 / 2887
Регистрация: 21.04.2018
Сообщений: 33,041
Записей в блоге: 2
08.05.2024, 22:49
Цитата Сообщение от ProgNew Посмотреть сообщение
Подскажите пожалуйста как тут преобразовать.
Вот создал образец БД.
Посмотрите его.
Вложения
Тип файла: zip equipmentDb.zip (916 байт, 5 просмотров)
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16118 / 11239 / 2887
Регистрация: 21.04.2018
Сообщений: 33,041
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru