|
0 / 0 / 0
Регистрация: 25.07.2016
Сообщений: 52
|
|
Добавление строк пользователем в DataGrid15.04.2019, 20:05. Показов 6884. Ответов 16
Метки нет (Все метки)
Как добавить выбранное в TextBlock количество строк, так что бы их можно было потом редактировать. Я так понимаю для этого нужно сделать привязку к коллекции. Добавленные строки надо записать в List<double>.
0
|
|
| 15.04.2019, 20:05 | |
|
Ответы с готовыми решениями:
16
DataGrid динамическое добавление строк
|
|
Модератор
|
||
| 15.04.2019, 20:39 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 25.07.2016
Сообщений: 52
|
|
| 15.04.2019, 21:18 [ТС] | |
|
Спасибо. Привязал Grid к ObservableCollection. Могу редактировать но не могу сохранять изменения строки в коллекцию. И возможно ли ObservableCollection будет привести к двумерному массиву?
Добавлено через 30 минут upd. Как привести разобрался. Как сохранять данные введенные пользователем?
0
|
|
|
Модератор
|
|||
| 15.04.2019, 22:49 | |||
Сообщение было отмечено Элд Хасп как решение
РешениеВ самом простом случает, Model состоит из сериализуемых классов и по команде сохранить/загрузить сериализуется/десериализуется вся Model целиком. Добавлено через 1 минуту Для чего Вам подобное понадобилось? Возможно, Вы выбрали неверный путь реализации.
0
|
|||
|
0 / 0 / 0
Регистрация: 25.07.2016
Сообщений: 52
|
|||||||||||
| 15.04.2019, 23:08 [ТС] | |||||||||||
|
Я создаю привязку так CoorTableX.ItemsSource = coordX; Так же из того что я нашел, чтобы сохранять введенные данные в ЗАМЛе мы должны написать DataGridTemplateColumn, но когда я так делаю мне выбивает такой exception DataGridTemplateColumn. Сейчас мой код такой.
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Привести коллекцию к двумерному массиву надо потому что, сам обсчет задачи требует на входе двумерный массив. Сейчас по факту я сделал 2 DataGrid один для X второй для Y. После я приведу коллекцию к 2-м массивам, все еще не двумерный, но хоть что-то. P.S. Возможно мне вообще DataGrid не нужен, я в с WPF знаком только 5 дней как. Все что нужно это взять у пользователя заданное количество координат (задает их количество пользователь) и найти периметр.
0
|
|||||||||||
|
Модератор
|
||
| 16.04.2019, 02:42 | ||
|
Вы уже здесь неверно представляете архитектуру приложения в целом. А раз сама архитектура неправильна, то, сами понимаете, реализация как минимум будет "кривой". Раз Вам для расчёта нужен двумерный массив, то есть Ваш тип основной данных. Он будет у Вас в Model. А вот как его отображать, к какому типу для этого надо привести - это уже вторичный вопрос. Поэтому давайте сначала разберёмся с Моделью. Что за расчёты у Вас с данными? Мне не нужен их алгоритм. Нужно какие типы исходных данных, какие получаются типы расчётных данных. И коротко, смысл методов, чтобы я мог понять что с чем согласуется/стыкуется/связывается и т.п.
0
|
||
|
0 / 0 / 0
Регистрация: 25.07.2016
Сообщений: 52
|
|
| 16.04.2019, 03:20 [ТС] | |
|
Если кратко, то у меня есть класс (написан не мной), для своей работы он требует двумерный массив, где i = х координате,а j =у коорд. В классе реализован метод Calc что возвращает значение типа double. Это значение нужно вывести пользователю. Соответственно координаты (и их количество) задает пользователь. Мне нужно только взять эти координаты.
0
|
|
|
Модератор
|
|||
| 16.04.2019, 10:20 | |||
|
Я Вас правильно понял? Если да, то подобное появляется из-за плохого применения ООП. В ООП вместо массива double[n,2] (где n - количество координат, double[i, 0] - координата X, double[i, 1] - координата Y), должен применяться Coord[n], где Coord - название типа имеющего свойства X и Y. Что за двумерный массив? Вариантов может быть много. Один из них я описал выше - когда используется две колонки для задания X и Y. Может быть ещё реализация, когда, допустим, задаётся рельеф местности. В этом случае используется двумерный миссив с произвольными размерами, а значение элемента - это высота. Может быть ещё множество реализаций. Я же не могу гадать, что у Вас там.
0
|
|||
|
0 / 0 / 0
Регистрация: 25.07.2016
Сообщений: 52
|
||||||||||||
| 16.04.2019, 12:55 [ТС] | ||||||||||||
|
*Реализовано должно быть так. Координаты устанавливаются через setter полей int[]X и int[]Y соответственно. Добавлено через 5 минут P.S. можно считать что ничего не реализовано, т.к. даже то что уже реализовано работает очень криво. Добавлено через 25 минут UPD. Пока что все реализовано так. Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Хотелось бы сделать тоже самое но через DataGrid, что бы иметь возможность визуально видеть все введенные вершины, и редактировать их при необходимости.
0
|
||||||||||||
|
Модератор
|
||
| 16.04.2019, 15:19 | ||
|
Мы как будто на разных языках разговариваем! Зачем переделывать Модель? Тем более что это переделка всё равно не правильная! Исходя из того, что Вы написали и моих додумываний, Вам надо передать в метод последовательность координат точек на двумерной поверхности. Так? Если да, то для координат точек в Net есть специальные типы:
Для последовательностей применяется тип IEnumerable<T>. В Вашем случае, хоть Вы и работаете с целыми значениями лучше всего подойдёт System.Windows.Point, и, соответственно, последовательность из списка List<Point> или ObservableCollection<Point> Подключив такую коллекцию к DataGrid Вы автоматически получите две колонки, соответственно, для X и Y. Единственное у Point нет открытого безпараметрического конструктора, поэтому с новой строкой чуть труднее. Я сейчас занят - напишу позднее как с этим быть. Пока ответьте - правильно ли я понял что Вам надо для расчёта?
1
|
||
|
0 / 0 / 0
Регистрация: 25.07.2016
Сообщений: 52
|
|
| 16.04.2019, 15:25 [ТС] | |
|
0
|
|
|
Модератор
|
|||||||
| 16.04.2019, 15:42 | |||||||
|
Добавлено через 15 минут Вам лучше всего сделать свой класс - обход на ограничения создания новой строки при отсутствии безпараметрического конструктора - геморрой. Свой класс (или структура) очень простой
0
|
|||||||
|
0 / 0 / 0
Регистрация: 25.07.2016
Сообщений: 52
|
|
| 16.04.2019, 15:44 [ТС] | |
|
Если лучше то, ок. Я так понимаю что при помощи метода CopyTo можно будет ObservableCollection<Point> записать в Point[]?
0
|
|
|
Модератор
|
||||||
| 16.04.2019, 15:45 | ||||||
Сообщение было отмечено Элд Хасп как решение
Решение
Тем более что с учётом WPF лучше сразу реализовать INPC. Проще на основе OnProperyChangeClass - его реализаций много в разделе. Выберите удобную для Вас.
0
|
||||||
|
0 / 0 / 0
Регистрация: 25.07.2016
Сообщений: 52
|
||
| 16.04.2019, 15:47 [ТС] | ||
|
0
|
||
|
Модератор
|
|||
| 16.04.2019, 15:54 | |||
Сообщение было отмечено Элд Хасп как решение
РешениеЕсли нужна последовательная обработка элементов, то лучше всего использовать в методе IEnumerable. Если так уж сильно нужно работать именно с индексами элементов, то преобразовать чем в массив (метод ToArray()) лучше в список - метод ToList() Добавлено через 3 минуты Для этого тип элемента коллекции должен иметь безпараметрический конструктор. У дефолтного Point такого нет. Поэтому для добавления новых точек придётся создавать специальную группу элементов. Проще свой класс объявить.
1
|
|||
|
0 / 0 / 0
Регистрация: 25.07.2016
Сообщений: 52
|
|
| 16.04.2019, 15:55 [ТС] | |
|
0
|
|
| 16.04.2019, 15:55 | |
|
Помогаю со студенческими работами здесь
17
[WPF] Заполнение DataGrid пользователем Функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение строк [WPF] Как в DataGrid очистить ячейку с форматом Decimal в окне пользователем? Написать программу, использующую стандартную функцию сравнения строк для определения среди трех строк, вводимых пользователем, одинаковых. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|