powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Сохранение записей из DataGrid в БД, MVVM
15 сообщений из 15, страница 1 из 1
Сохранение записей из DataGrid в БД, MVVM
    #38073068
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток!
помогите советом, как лучше реализовать:
DataGrid привязан к ObservableCollection<Person>. Пользователь изменяет значения в нескольких строках. По кнопке Сохранить, изменения сохраняются в БД. При возникновении ошибки при сохранении в БД соответствующая строка в DataGrid восстанавливает предыдущее значение и пользователю показывается текст ошибки.
Смотрел в сторону IEditableObject - но что-то не пойму как его применить именно к этой задаче (для построчной отсылки изменений в БД он идеально подходит), тем более, что сразу после окончания редактирования строки (до сохранения в БД) автоматом вызывается метод EndEdit().
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38073078
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем востанавливать по ошибки? И в каком случае ошибка происходит?
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38073086
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолют,

Восстанавливать, чтобы пользователь видел значение до сохранения в БД. Какая ошибка - не суть, просто БД при попытке сохранения вернула исключение.
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38073089
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не особо понял логику. Смотрите, пользователь париться заполняет новые значения в гриде (а это труд, как ни как) и пытается схоронить в бэдэ, а тут бац! и ошибка. И все его новые значения обратно в старые?
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38073098
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолют,

не все. А только те, при сохранении которых возникла ошибка.
Метод Save() должен вызываться для каждой строки, где изменились значения.
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38073101
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NАбсолют,

не все. А только те, при сохранении которых возникла ошибка.
Метод Save() должен вызываться для каждой строки, где изменились значения.

Даже если так.

Не проще ли валидацию сделать? ;)
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38073107
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолют,

валидация - само собой должна быть на клиенте!
тут дополнительный уровень - ответ бд при попытке изменить строку.
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38073490
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_N,

IEditableObject вам здесь слабо поможет.
Вариант:
На момент сохранения иметь список изменений источника данных.
После сохранения нужно знать какие изменения не прошли. Т.е. ваш серверсайд должен вас об этом уведомить в ответе.
Зная, какие именно изменения не прошли, восстанавливать предыдущие значения.

Но, во-первых, почему не устраивает вариант с валидацией? У нас есть БД, которая, исходя из неизвестной нам логики, может отвергать те или иные изменения? Вы посылаете 1 запрос на 1 строку при сохранении и часть может не "дойти"?
Затем,
Что делать с непрошедшими изменениями? "Забывать" их?
Как сигнализировать клиенту о том, что изменения второй строки из трех посланных на сохранение не прошли и как указать какое именно поле не "понравилось" БД? MessageBox? ToastNotifications? Подсвечивать красным прямо в гриде?
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38073679
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticНа момент сохранения иметь список изменений источника данных.
После сохранения нужно знать какие изменения не прошли. Т.е. ваш серверсайд должен вас об этом уведомить в ответе.
Зная, какие именно изменения не прошли, восстанавливать предыдущие значения.

Скорее всего, пойду именно по этому пути. Т.е. во ViewModel добавлю объект-копию модели, которую буду заполнять по PropertyChanged + флаг IsInEditMode. При сохранении вызывается метод Save() репозитария, если успешный ответ - сбрасываем флаг, если нет - сбрасываем флаг, восстанавливаем данные из копии и выводим пользователю сообщение об ошибке.

enigmaticНо, во-первых, почему не устраивает вариант с валидацией? У нас есть БД, которая, исходя из неизвестной нам логики, может отвергать те или иные изменения? Вы посылаете 1 запрос на 1 строку при сохранении и часть может не "дойти"?

Банальная ситуация: данные, которые видит у себя на экране пользователь уже устарели (другой пользователь уже их изменил) => необходимо уведомить пользователя о том, что он "затрет" изменившиеся данные и для получения актуальных данных необходимо нажать кнопку обновить.

enigmaticЗатем,
Что делать с непрошедшими изменениями? "Забывать" их?
Как сигнализировать клиенту о том, что изменения второй строки из трех посланных на сохранение не прошли и как указать какое именно поле не "понравилось" БД? MessageBox? ToastNotifications? Подсвечивать красным прямо в гриде?


Безусловно, о непрошедших изменениях "забывать" нельзя. вариант: красная рамка в гриде + в доп. колонке в конце грида выводить сообщение об ошибке в строке с ошибочными данными.
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38074069
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему, у вас всё хорошо.
Но немного занудства:авторСкорее всего, пойду именно по этому пути. Т.е. во ViewModel добавлю объект-копию модели, которую буду заполнять по PropertyChanged + флаг IsInEditMode. При сохранении вызывается метод Save() репозитария, если успешный ответ - сбрасываем флаг, если нет - сбрасываем флаг, восстанавливаем данные из копии и выводим пользователю сообщение об ошибке.В случае отрицательного ответа ещё нужно знать какие изменения прошли, а какие нет, дабы знать что восстанавливать.
Nicky_NБанальная ситуация: данные, которые видит у себя на экране пользователь уже устарели (другой пользователь уже их изменил) => необходимо уведомить пользователя о том, что он "затрет" изменившиеся данные и для получения актуальных данных необходимо нажать кнопку обновить.По сути, оптимистическая блокировка? Это классно. А моему серверсайду пофигу на эти ньюансы, т.к. нет большого потока пользователей.
Кстати, а вы уже придумали как вы собираетесь "мержить" конфликтные изменения? :D
авторБезусловно, о непрошедших изменениях "забывать" нельзя. вариант: красная рамка в гриде + в доп. колонке в конце грида выводить сообщение об ошибке в строке с ошибочными данными.Можно вместо доп.колонки приспособить механизм выдачи ошибок валидации, к слову.
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38074139
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticПо сути, оптимистическая блокировка? Это классно. А моему серверсайду пофигу на эти ньюансы, т.к. нет большого потока пользователей.
Кстати, а вы уже придумали как вы собираетесь "мержить" конфликтные изменения? :D
Да, совершенно верно, она самая. Стараюсь ее использовать для всех изменяющихся данных.
При конфликтах решение принимает сам пользователь: хочешь увидеть актуальное состояние данных - жми кнопку обновить, все и так устраивает - жми выход :)

enigmaticМожно вместо доп.колонки приспособить механизм выдачи ошибок валидации, к слову.
Можно поподробнее идею раскрыть?
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38075104
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_Nenigmatic"мержить" конфликтные изменения?..Да, совершенно верно, она самая. Стараюсь ее использовать для всех изменяющихся данных.
При конфликтах решение принимает сам пользователь: хочешь увидеть актуальное состояние данных - жми кнопку обновить, все и так устраивает - жми выход :)> хочешь увидеть актуальное состояние данных - жми кнопку обновить
> все и так устраивает - жми выход :)
Но ведь если он нажмет "обновить" или выйдет, то он потеряет свои текущие изменения.
Как быть, если он хочет видеть в чем конфликт данных и принимать решение - сохранить свои изменения поверх актуальных или отбросить свои изменения?

Nicky_NenigmaticМожно вместо доп.колонки приспособить механизм выдачи ошибок валидации, к слову.Можно поподробнее идею раскрыть?Приспособить вижуалы валидации DataGrid для выдачи сообщений об таких ошибках сохранения данных. Всё равно эти вижуалы уже описаны в шаблоне, грех не воспользоваться.
Т.е. мы не смогли сохранить строку такую-то, подсвечиваем её, ругаемся на неактуальность данных.
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38075301
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic,

enigmaticКак быть, если он хочет видеть в чем конфликт данных и принимать решение - сохранить свои изменения поверх актуальных или отбросить свои изменения?

вопрос, конечно, интересный. я так глубоко не копаю. можно из функции Update в БД возвращать актуальные данные при ошибке, показывать пользователю и ждать от него решения, но, имхо, как-то уж очень геморно)

enigmaticПриспособить вижуалы валидации DataGrid для выдачи сообщений об таких ошибках сохранения данных. Всё равно эти вижуалы уже описаны в шаблоне, грех не воспользоваться.
Т.е. мы не смогли сохранить строку такую-то, подсвечиваем её, ругаемся на неактуальность данных.

Классная картинка - как раз то, что надо. Шаблон, в котором вижуалы описаны - опенсорс, угостите ссылочкой?
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38075769
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NКлассная картинка - как раз то, что надо. Шаблон, в котором вижуалы описаны - опенсорс, угостите ссылочкой?
Опенсорсней не бывает, это же всё есть в дефолтном шаблоне :)
Напр. ValidationSummary описывается в шаблоне DataGrid 'а, подсветка красным для строки это Rectange x:Name="InvalidVisualElement", и т.д.
Просмотрите дефолтный шаблон досконально и знайте, что если вы его не переопределяли, то он у вас подключен изначально.
...
Рейтинг: 0 / 0
Сохранение записей из DataGrid в БД, MVVM
    #38075866
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic,

спасибо за ссылку!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Сохранение записей из DataGrid в БД, MVVM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]