|
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
|
|||||||||||
Передать IQueryable<T> в новое окно07.06.2021, 09:40. Показов 4627. Ответов 44
Добрый день!
Подскажите, как можно решить данный вопрос... Я хочу создать окно, где будет находиться таблица, необходимые мне кнопки для манипуляциями данными. В базе данных у меня есть достаточно много данных, которые я хочу выводить на экран, например, отряды, объекты, районы... Моя идея такова: написать запрос перед вызовом окна, после передать этот запрос в окно и выполнить его там. Пример:
Если я создам отдельный метод типа LoadData<T>(IQueryable<T> data), то это сработает, но я не знаю, как мне его сохранить в какую-нибудь переменную, чтобы я не закрывая окно мог еще раз его вызвать, потому что сделать private IQueryable<T> data; нельзя... Подскажите, как мне можно решить данную проблему?
0
|
|||||||||||
| 07.06.2021, 09:40 | |
|
Ответы с готовыми решениями:
44
Закрыть окно, из которого создано новое окно Передать параметр в новое окно |
| 07.06.2021, 14:38 | |
|
ndrnesterov, если честно, мне не приходилось связываться с чистым SQL в WPF, т.к. для этого есть EF)) В любом случае пользователь тоже вряд ли будет писать в первом окне параметры запроса, т.е. они будут весьма типизированными. Т.о. задача сводится к тому, чтобы определиться с перечнем типовых запросов, создать метод принимающий соответствующий тип и осуществляющий сам запрос по тем или иным параметрам
1
|
|
|
Модератор
|
||
| 07.06.2021, 14:44 | ||
|
ndrnesterov, можно создать Окно с обобщённым типом.
Но XAML не может работать с обобщенными типами. Поэтому содержимое такого Окна вам придётся задавать в Шарпе. Можно использовать Шаблон Данных, а в Content Окна передать VM под этот Шаблон. Добавлено через 3 минуты В "ручную" на Шарпе? Заранее заданные в XAML колонки? Автогенерация? Может ещё что?
0
|
||
|
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
|
|||
| 07.06.2021, 14:51 [ТС] | |||
|
У них разные свойства и форме не обязательно знать, какие там свойства... Я могу написать запрос и так: db.Squads.Select(x=>new {x.Id, x.Name}) и логика в форме далжна сделать запрос и показать таблицу со столбцами Id и Name) Добавлено через 3 минуты
0
|
|||
| 07.06.2021, 14:52 | ||
|
тык
0
|
||
|
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
|
|||
| 07.06.2021, 14:59 [ТС] | |||
|
Добавлено через 6 минут Просто я понимаю, что создавать 11 окон или 11 UC просто для того, чтобы вывести разные таблицы нет смысла... Ведь можно эти таблицы просто передать в компонент и он сам переформирует столбцы и покажет новые данные) А если мне нужно будет показать разных 100 таблиц? Именно поэтому я хочу просто в окном окне разместить компоненты так, как мне нужно и если пользователь захочет посмотреть список отрядов, он нажмет кнопочку и откроется окно А. После от закроет его, захочет открыть список объектов, а ему снова откроется окно А, которое покажет таблицу со списком объектов... После он захочет открыть еще какой-нибудь список... Я хочу, чтобы окно А могло открыть таблицу с любым запросом))
0
|
|||
| 07.06.2021, 15:04 | |
|
ndrnesterov, чтобы искусственный интеллект работал, его логику надо прописать)) Чудес-то не бывает
У Вас же не производится выборка из разных таблиц? Соответственно, UC под каждую таблицу - весьма логичное решение. При появлении новой таблицы, добавляете UC и пару строк кода в метод выборки данных.
1
|
|
|
Модератор
|
||
| 07.06.2021, 15:07 | ||
|
И без этой последовательности запрос нельзя осуществить. Разница между IQueryable и LINQ только в типе этой последовательности. Поэтому на время выполнения запроса нельзя уничтожать экземпляр контекста БД по которому делался этот запрос. Вы можете убрать using и передавать вместе с запросом и сам контекст, чтобы уничтожить его после выполнения запроса.
0
|
||
|
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
|
||||
| 07.06.2021, 15:12 [ТС] | ||||
![]() Хорошо, вот от какой идеи я отталкиваюсь... Предположим, я на форме размещу ComboBox со списом таблиц и DataGrid, куда будет выводиться таблица) Пока вроде все легко) Я выбираю в ComboBox таблицу и она показывается ниже в DataGrid) Теперь усложним задачу, а имеено сделаем так. чтобы при выборе в ComboBox таблицы, результат показывался не в DataGrid, который находится ниже, а в DataGrid, котрый находится в новом окне? При этом ножно, чтобы запрос выполнялся именно в новом окне)) Добавлено через 1 минуту Добавлено через 57 секунд
0
|
||||
|
Модератор
|
||
| 07.06.2021, 15:14 | ||
|
Если у вас есть несколько типов с какими-то общими свойствами, и второе окно (в котором как я понял и есть элемент из форм) работает только с этими общими свойствами, то надо сделать общий базовый тип для этих свойств. И работать с ним. Если же вам нужна работа с любыми свойствами, то во втором окне по любому нужна какая-то логика определяющая конкретный тип и уже исходя из этого работающая с его свойствами. То есть я ни при каком раскладе не вижу никакой необходимости в обобщённом типе. Ну, или вы опустили какие-то важные для понимания детали.
0
|
||
| 07.06.2021, 15:17 | |||
|
Дальше, как я уже ранее расписал взаимодействие классов, в VM второго окна передаете экземпляр класса Model и SelectedItem из ComboBox. На основе этого выбираете тип запроса к БД, осуществляете его и возвращаете данные, которые надо вывести
0
|
|||
|
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
|
||||||||
| 07.06.2021, 15:21 [ТС] | ||||||||
|
Добавлено через 2 минуты
0
|
||||||||
|
Модератор
|
|||||||||||||
| 07.06.2021, 15:27 | |||||||||||||
Для автогенерации колонок? WPF использует для этого рефлексию. Повторить это можно без каких либо проблем. И разницы никакой нет. Источник использует тип IEnumerable без обобщённого параметра. Вопрос в том, как вы это собираетесь использовать? Так как я не понимаю какая может быть разница в WPF для object или обобщённого параметра. \Добавьте деталей описывающих как вы используете этот обобщённый параметр.
0
|
|||||||||||||
|
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
|
|||
| 07.06.2021, 15:32 [ТС] | |||
|
Добавлено через 4 минуты Я сейчас покажу, как этот код работает для меня...
0
|
|||
| 07.06.2021, 15:41 | ||
|
0
|
||
|
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
|
|||||||||||||
| 07.06.2021, 15:46 [ТС] | |||||||||||||
|
Добавлено через 1 минуту Кнопка вызова:
Теперь я хочу вывести, например, список пожарных частей: Кнопка вызова:
Но вот если я захочу добавить кнопку типа: То я не смогу обновить данные, потому что не знаю, что мне передать в метод DataLoadAsync<T>(IQueryable<T> linq)
0
|
|||||||||||||
|
Модератор
|
|||
| 07.06.2021, 15:57 | |||
Сообщение было отмечено ndrnesterov как решение
Решение
ndrnesterov, в примере выше я только показал как передать контекст БД.
Обощённый Какая разница для второго Окна получит оно данные в последовательности IQueryable<T> или IQueryable<object>? Если вам нужно отложенное выполнение задачи, то как я показывал выше, надо создавать задачу с запросом и передавать её. Вариации создания задачи может быть много. Но выходить из неё будет список object. Вот объясните какая разница для второго Окна это будет список object или с обобщённым типпп. Добавлено через 7 минут Вам нужна возможность повторить из второго Окна запрос для обновления данных. Сейчас покажу пример. Но он будет для DataGrid. Не знаю насколько подойдёт вашего элемента - для этого нужно знать его тип, тип его свойств.
1
|
|||
|
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
|
||
| 07.06.2021, 16:00 [ТС] | ||
|
Я помню вы мне писали немного ранее об этом, но я недопонял этого... Отлично! Спасибо вам за помощь! Это и есть решение моей задачи)))
0
|
||
|
Модератор
|
|||||||||||
| 07.06.2021, 16:05 | |||||||||||
Сообщение было отмечено ndrnesterov как решение
Решение
1
|
|||||||||||
|
4 / 4 / 3
Регистрация: 28.11.2017
Сообщений: 107
|
|||
| 07.06.2021, 16:07 [ТС] | |||
|
Добавлено через 1 минуту
0
|
|||
|
Модератор
|
|||
| 07.06.2021, 16:09 | |||
|
У вас "зависло" создание контекста БД. Лучше всё это завернуть в функцию, как показал выше. Добавлено через 1 минуту
0
|
|||
| 07.06.2021, 16:09 | |
|
Нужно открыть новое окно и передать в него данные POST!!!
В IE 6.0 через window.open создаю новое окно с параметром resizeable=yes, но создаваемое окно упорно не позволяет менять размер. Не удаётся неявно преобразовать тип System.Linq.IQueryable<<anonymous type>> в System.Linq.IQueryable<Character> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|