|
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 22
|
|||||||||||||||||||||
Как передать данные в динамически созданные ячейки статической datagrid?16.04.2019, 18:36. Показов 4145. Ответов 20
Метки нет (Все метки)
Добрый день.
В проекте имеется datagrid
0
|
|||||||||||||||||||||
| 16.04.2019, 18:36 | |
|
Ответы с готовыми решениями:
20
Получить данные с выбранной ячейки DataGrid и поместить их в другой DataGrid
WPF dataGrid Как получить данные из конкретной ячейки или строку в виде масива |
|
Модератор
|
|||||
| 16.04.2019, 19:31 | |||||
|
Прочитайте тему "INPC и получение данных из Модели" из Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп] Вы должны создать коллекцию, привязать её её к DataGrid.ItemsSource, и потом все манипуляции производить над этой коллекцией, а не UI элементом. Сами себе создали труднорешаемую проблему.
0
|
|||||
|
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 22
|
|
| 17.04.2019, 10:43 [ТС] | |
|
А как быть в случае, если количество столбцов в DataGrid зависит от некоторых условий, которые вводятся пользователем, скажем так, на предыдущем этапе?
Диалоговое окно для ввода данных - условие заказчика. Не хочет он, чтобы пользователь менял данные напрямую в ячейке. Размер ячейки опять-таки не фиксированный, а зависит от вводимых пользователем данных.
0
|
|
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
|||||||
| 17.04.2019, 11:03 | |||||||
|
Для колонок можно задавать свойство Visibility, которое следует привязывать на bool-свойства ViewModel
0
|
|||||||
|
Модератор
|
|||||
| 17.04.2019, 12:00 | |||||
|
Алексей ВМ, ответить Вам в общем очень трудно, если вообще возможно.
Каждое из Ваших условий это отдельная задача и решается она средствами почти независящими от других условий. Поэтому давайте все Ваши условия разобьём на отдельные задачи. И будем решать их последовательно. Опишите что за условия, чем вызвана такая задача, как в Модели потом обрабатываются эти данные? Типичным случаем для которого предназначен дефолтно DataGrid является отображение линейного списка и каждый столбец DataGrid отображает указанное свойство элемента списка. Конечно, DataGrid (как и любой WPF элемент) позволяет очень широкие настройки. Но всё же изменение количества колонок - это очень редкий и нетипичный сценарий. Его надо точно настраивать пот требования задачи. И просто разъяснения надо менять количество колонок для этого мало. Надо понимать для чего менять, от чего это зависит, как потом будут меняться данные.Добавлено через 5 минут Они как бы есть, но срабатывают только один раз при инициализации. А настраивать их динамическое изменение это ещё та задача. Всё приходится делать на костылях.
0
|
|||||
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
|
| 17.04.2019, 12:01 | |
|
hamin, да, верно. Спасибо за подсказку. DataGridTextColumn не является частью визуального дерева, поэтому придётся привязываться, используя BindingProxy. BindingProxy - известное решение данной проблемы. Я его использовал, и проблем в поддержке не возникало. Поэтому не знаю, насколько можно назвать его костылём.
1
|
|
|
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 22
|
||
| 17.04.2019, 12:48 [ТС] | ||
она состоит из двух этапов 1. Пользователь вводит начальные данные, в том числе количество операций и количество полезных компонентов; Затем он производит химические опыты. 2. Результаты этих опытов должны быть оформлены в виде таблицы, количество строк в которой равно количеству операций, а к фиксированному количеству столбцов добавляются столбцы, количество которых пропорционально количеству полезных компонентов. Причем сначала формируется эта таблица, а затем пользователь её заполняет, кликая на определенные столбцы и вводя в появившемся диалоговом окне данные, которые по закрытию этого окна передаются в таблицу. На этапе разработки неизвестно требуемое количество операций и количество полезных компонентов, они ограничены лишь максимальными значениями, которые задаю я. Собственно, хотелось бы понять, как решать такую задачу, от какой модели разработки отталкиваться - "Model first" или "View firtst".
0
|
||
|
Модератор
|
||||
| 17.04.2019, 14:27 | ||||
Названия типов и свойств, естественно, условны. Один из способов отображения: Почему в Вашем случае выбран такой нетипичный способ отображения?
0
|
||||
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
|||||||||||||||||||||||||||||||
| 17.04.2019, 15:14 | |||||||||||||||||||||||||||||||
Сообщение было отмечено Элд Хасп как решение
Решение
Нам нужно генерировать столбцы в коде, и сделать всё это в рамках MVVM.
Делать это нужно примерно так: Пусть имеется ViewModel для таблицы. У неё должен быть массив компонентов, по которым мы будет генерировать колонки, и коллекция ViewModel'ей операций
После изменения значений в дочернем окне нужно перезадать свойство ComponentValues в OperationViewModel, чтобы обновить значения в стоке таблицы. P.S. это примерная реализация, как нужно сделать. В ней могут быть синтаксические ошибки. Я поведал лишь об идее реализации.
0
|
|||||||||||||||||||||||||||||||
|
Модератор
|
||
| 17.04.2019, 15:34 | ||
|
Для этого не нужен DataGrid с изменяемым количеством колонок. Достаточно горизонтального ListBox.
0
|
||
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
||
| 17.04.2019, 15:38 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 22
|
||
| 17.04.2019, 15:39 [ТС] | ||
|
В результате должна сформироваться след . таблица Продукт соответственно результат операции, количество полезных компонентов - цинк, медь, сера и тп, задаётся перед началом опыта. Бирюзовым отмечены ячейки, в которые забиваются данные после проведения всего опыта - то есть всех операций. Люди привыкли забивать и анализировать данные в таблице в экселе, приходится под них подстраиваться.
0
|
||
|
Модератор
|
||
| 17.04.2019, 15:52 | ||
|
Колонки под заголовками "Массовая доля" и "Извлечение" - это списочные свойства. А отображают их горизонтальные ListBox. Можно, конечно, пойти и путём эмуляции таблицы в листе Excel с переменным количеством колонок, но, на мой взгляд, это создание самому себе сложностей. В том же Excel так не делается. Там постоянное количество колонок, просто их очень большое количество, а отображается часть из них.
0
|
||
|
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 22
|
||
| 17.04.2019, 15:54 [ТС] | ||
0
|
||
|
Модератор
|
||
| 17.04.2019, 15:59 | ||
|
Но реализация работы с данными и их представлением (отображением) это разные вещи. Вы же пытаетесь подстроить первое под второе, а должно быть наоборот. И ещё вопрос. Количество различных ингредиентов в серии опытов (которые в одной таблице) одинаково или тоже может различаться? Если может, то насколько существенно? В разы, или просто у какого-то ингредиента будет содержание 0% ?
0
|
||
|
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 22
|
||||
| 17.04.2019, 16:06 [ТС] | ||||
|
Добавлено через 6 минут
0
|
||||
|
Модератор
|
||
| 17.04.2019, 16:13 | ||
|
В самом ListBox тоже можете задать шаблон элемента. Примеры разных ListBox есть в самом начале моей темы "WPF vs WinForms (для начинающих)" в цикле Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]
1
|
||
|
Модератор
|
|||
| 17.04.2019, 16:17 | |||
|
Это позволяет при создании View наглядно видеть в конструкторе всё что создаётся привязками. Конечно, при достаточном опыте, когда себе чётко и безошибочно можешь в голове представить все этапы (особенно, то как они согласуются между собой) от этой схемы можно отойти. Добавлено через 3 минуты Хотя колонки "Массовая доля" и "Извлечение" будут соответствовать одной колонке DataGrid, но её ширина должна меняться. И хорошо, что это не должно происходить динамически.
0
|
|||
|
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 22
|
||
| 17.04.2019, 16:35 [ТС] | ||
|
0
|
||
| 17.04.2019, 16:35 | |
|
Помогаю со студенческими работами здесь
20
Как перед выводом DataGrid на экран прочитать данные из первой ячейки каждой строки? Как удалять динамически созданные компоненты? Как удалить динамически созданные компоненты? Как удалить динамически созданные PictureBox? Как удалить динамически созданные объекты?? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|