Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где запрашивать подтверждение на удаление записи? 
:(
    Опции темы
Экскалупатор
Дата 18.2.2011, 15:45 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



Код

 [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e)
            {
                if (System.Windows.Forms.MessageBox.Show("будем удалять?", "Внимание",
                        System.Windows.Forms.MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)
                {
                    base.OnRowDeleting(e);
                    if ((this.PersonsRowDeleting != null))
                    {
                        this.PersonsRowDeleting(this, new PersonsRowChangeEvent(((PersonsRow)(e.Row)), e.Action));
                    }
                }
            }

ничего не исключая из встроенного функционала, но ты спросил как лучше, на мой взгляд лучше так как описал, т.е. руками.

Цитата(Dims @  18.2.2011,  14:27 Найти цитируемый пост)
В этом случае грид ничего никому сообщать об удалении записей не станет. Так? Или ты имеешь в вижу события нажатия клавиатурных клавиш?

грид в любом случае будет сообщать просто ты не подписывался на его события, подпишись и все будешь получать, но встроенный код будет отрабатывать раньше чем твой(скорее всего) и твой на встроенный никак не повлияет, по этому да, я имею ввиду события нажатия клавиатурных клавиш.

в общем я смотрю это все сильно затягивается пора заканчивать. у тебя есть три пути:
1. вмешиваться в сгенерированный код(к примеру как описано выше) и пользоваться встроенным функционалом
2. писать проверку для разных случаев
3. реализовать все самому, так как тебе удобно.

я за вариант №3. для этого тебе нужно почитать книжечек пару штук, и разобраться как это работает, ты сильно выиграешь в этом случае(по крайней мере разберешься как это работает) и сделаешь так как тебе хочется, с любыми проверками и так как тебе удобно, писать не много(знаю по опыту), за минут 20-30 не торопясь, можно набросать рабочую версию. ну и минут за 20 - 30 довести ее до ума(если все так как ты описал), итого час работы. а мы уже тут второй день трепемся. не нравятся встроенные? не пользуйся, никто не заставляет, но других нету...

Добавлено @ 15:50
Цитата(Dims @  18.2.2011,  14:27 Найти цитируемый пост)
Значит, чтобы грид не удалял записи, эту операцию надо в нём выключить.

повторюсь, грид ничего не удаляет, он инициирует событие, а удаляет уже то что работает с базой. для этого надо задать запрос на удаление(руками или через мастер, не важно, но он должен быть), без запроса грид только удаляет строку из себя(т.е. из отображения, но не из базы), а значит можно в событии грида(когда он удаляет строку из себя) реализовать все что тебе требуется и заставить его реагировать так как тебе нужно - но это изврат полный.

Это сообщение отредактировал(а) Экскалупатор - 18.2.2011, 15:50
PM MAIL ICQ   Вверх
jonie
Дата 18.2.2011, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



А по мне так надо делать нечто вроде (тут описано не "панацея")
Configuration - класс (обычно статический) дающий в приложение конфигурацию
Data - слой абстракции к данным. Например NHibernate или EF или хоть ADO.NET. Тут просто работа с данными, без логики
Repository - слой доступа к данным, см. паттерн репозиторий
Win.Controllers - слой контроллера для WinForms приложения. Контроллеры это реакция на действия, а также получение конкретных данных (Ienumerable например) для маппинга их на слое View
Win.View - просмотр данных, работа в OnClick-ах сводится к вызову метода из контроллера. Тут же всякий визуально-завимисимый код (типа "линию сделать красной в гриде").
Application - микроприложение, собственно запускющее всю эту кухню в действие.

Конечно, связь везде через интерфейсы. Конкретные классы привязываются через Unity (например). Сами контроллеры  и View затягиваются в приложение через MEF (например)...

...реакция на события "Уверены что сохранить?" возможна в контроллере (не очень кошерно), а лучше в View как реакция на callback из контроллера (например подпиской на события аналогично методу Closing, где можно "отменить продолжение операции" поставив соотв. флаг в EventArgs).

......

Это сообщение отредактировал(а) jonie - 18.2.2011, 21:39


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Freyzer
Дата 19.2.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


обаятельный нахал
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 12.12.2009
Где: на Марсе

Репутация: нет
Всего: 1



А почему не создать в базе нужную хранимую процедуру на удаление и вызывать ее из приложения в определенных случаях? Я не знаю как там в десктоповых приложениях но думаю, асп и настольное приложение при работе с базой несильно отличаються.


--------------------
Advocatus Dei smile. Advocatus Diaboli smileAjo!   
PM MAIL   Вверх
-Mikle-
Дата 19.2.2011, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 1
Всего: 59



Цитата(Freyzer @  19.2.2011,  19:11 Найти цитируемый пост)
А почему не создать в базе нужную хранимую процедуру на удаление

Тут вопрос в другом был... Ничего, со временем Dims'у станет все понятно. Это определенный процесс, все через него прошли рано или поздно.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Dims
Дата 20.2.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Цитата(Freyzer @  19.2.2011,  16:11 Найти цитируемый пост)
А почему не создать в базе нужную хранимую процедуру на удаление и вызывать ее из приложения в определенных случаях?

Потому что Грид не будет вызывать эту процедуру сам собой. У грида есть определённый функционал, частью которого является возможность удалять записи. Прямо из грида. Чтобы воспользоваться хранимой процедурой, либо каким-то другим способом централизации процесса удаления, нужно будет этот функционал отключить.

Добавлено через 6 минут и 58 секунд
Цитата(Экскалупатор @  18.2.2011,  15:45 Найти цитируемый пост)
protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e

Да, думаю, переопределить этот метод -- оптимальное решение. Инфраструктура как раз для этого приспособлена: если ткнуть два раза в изображение таблицы в дизайнере, то попадаещь в редактор partial класса DataTable -- там и можно это сделать. Думаю, там нужно добавить запуск события наподобие как в гриде, с возможностью отмены -- и обрабатывать его в слое отображения.

Добавлено через 13 минут и 25 секунд
Хотя нет, этот метод уже определён, а это значит, придётся вмешиваться в код визарда. Некузяво.
PM MAIL   Вверх
Dims
Дата 20.2.2011, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Да и вообще. Подозреваю, что с OnRowDeleting и не получилось бы. Нигде не сказано, что base.OnRowDeleting собственно удаляет запись. Скорее всего, он выполняет связанные с этим операции, например, каскадное удаление. Так что блокировка этого вызова в переопределённом методе ничего бы не дала.
PM MAIL   Вверх
Dims
Дата 20.2.2011, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



В общем, такое впечатление, что неверно спроектирован компонент BindingSource. Именно он должен был бы, как мне кажется, отвечать за эту функцию. У него есть методы Remove, RemoveAt и RemoveCurrent. Скорее всего, именно их вызывает грид и другие привязанные компоненты. В свою очередь, эти методы, наверняка транслируют удаление ниже, на слой работы с данными, в DataTable. То есть, именно в этом компоненте и должно было быть размещено событие для проверки удаления. Так же, именно тут должен был быть расположен функционал по заданию значений по умолчанию клиентского уровня...
PM MAIL   Вверх
-Mikle-
Дата 20.2.2011, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 1
Всего: 59



Цитата(Dims @  20.2.2011,  19:02 Найти цитируемый пост)
Хотя нет, этот метод уже определён, а это значит, придётся вмешиваться в код визарда. Некузяво

Наследуйтесь от своего типизированного DataTable и перекройте этот метод... не забудьте вызвать base.OnRowDeleting в нужном месте.

Цитата(Dims @  20.2.2011,  19:37 Найти цитируемый пост)
В общем, такое впечатление, что неверно спроектирован компонент BindingSource

Также, рассмотрите возможность наследования от него.

PS: Я еще раз, настоятельно рекомендую, хотя бы начать рассматривать возможности и принципы WPF. Не для этого случая, а вообще. Чем раньше, тем лучше.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Dims
Дата 21.2.2011, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Отнаследовался от BindingSource, добавил там несколько проверок через события. Получилось очень даже ничего.

Добавлено через 1 минуту и 5 секунд
Цитата(-Mikle- @  20.2.2011,  22:48 Найти цитируемый пост)
возможности и принципы WPF

Имеется в виду Windows Presentation Foundation? Его я тоже изучаю, но не знал, что они там с базами тоже что-то наворотили.
PM MAIL   Вверх
-Mikle-
Дата 21.2.2011, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 1
Всего: 59



Они там не с базами натворили, а с источниками данных и привязкой UI к ним. В качестве источника данных, по-прежнему может выступать любой объект, а вот привязка выглядит теперь оригинально. Лично я очень люблю все эти фишки с DataContext, Biniding, Template, DataTemplate, Style, Resources, RoutedEvents, RoutedCommands и еще все остальную кучу...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0888 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.