powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / удаление строк с подтверждением
18 сообщений из 18, страница 1 из 1
удаление строк с подтверждением
    #39698177
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
маленькая тестовая задача
на форме DataGridView и BindingNavigator
Хочу обработать событие удаления строки, переспросить и при необходимости отменить удаление
Повесил обработчик Ref_meta_tables.RowDeleting += Row_Deleting
Внутри - безусловный пока вызов e.Row.RejectChanges()
Нажимаю кнопку "удалить" в BindingNavigator/е
Обработчик вызывается, мессадж выводится, но строка все равно удаляется


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        private static void Row_Deleting(object sender,
            DataRowChangeEventArgs e)
        {
            e.Row.RejectChanges(); // как пишут, должен отменить удаление
            MessageBox.Show("ok");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.ref_meta_tablesTableAdapter.Fill(this.test_isolDataSet.Ref_meta_tables);
            this.test_isolDataSet.Ref_meta_tables.RowDeleting += Row_Deleting;
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698205
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RejectChanges надо вызывать после удаления строки, в обработчике RowDeleting она еще не удалена, и отменять нечего.
Как-то вот так (только в поле уровня класса хранить ссылку на удаленный DataRow).
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698225
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А я по простому, по рабоче-крестьянски


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
private void Row_Deleting(object sender, DataRowChangeEventArgs e)
        {
            if (! ClassFunc.ConfirmDeleteRecord())
                throw new Exception();

        }

...

static public Boolean ConfirmDeleteRecord()
        {

            return (MessageBox.Show("Вы уверены, что запись надо удалить?", "Подтверждение",
                  MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
                      == DialogResult.Yes);
        }
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698263
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

мне нравится
но ест вопрос
у меня по любому exception вываливается такая хрень
Как ее принято централизовано обрабатывать?

ЗЫ: в Делфи было специальное исключение - abort - и оно никуда не вываливалось пользователю
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698289
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныRejectChanges надо вызывать после удаления строки, в обработчике RowDeleting она еще не удалена, и отменять нечего.
Как-то вот так (только в поле уровня класса хранить ссылку на удаленный DataRow).
так работает, но после отмены удаления переходит на следующую строку
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
        private static void Row_Deleting(object sender,
            DataRowChangeEventArgs e)
        {
            if (MessageBox.Show("Вы уверены, что запись надо удалить?", "Подтверждение",
                  MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
                      != DialogResult.Yes)
            {
                e.Row.RowError = "cancel delete";
            }
        }

        private static void Row_Deleted(object sender,
            DataRowChangeEventArgs e)
        {
            if (e.Row.RowError == "cancel delete")
            {
                e.Row.RejectChanges();
                e.Row.RowError = "";
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.ref_meta_tablesTableAdapter.Fill(this.test_isolDataSet.Ref_meta_tables);
            this.test_isolDataSet.Ref_meta_tables.RowDeleting += Row_Deleting;
            this.test_isolDataSet.Ref_meta_tables.RowDeleted  += Row_Deleted;
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698376
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае, наверное, чусше ловить попытки удалить строку на уровне UI - например, через DataGridView.UserDeletingRow .
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698425
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныВ данном случае, наверное, чусше ловить попытки удалить строку на уровне UI - например, через DataGridView.UserDeletingRow .мне это не нравится, потому как еще есть навигатор, а его события никак не связаны с гридом
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698454
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxСон Веры ПавловныВ данном случае, наверное, чусше ловить попытки удалить строку на уровне UI - например, через DataGridView.UserDeletingRow .мне это не нравится, потому как еще есть навигатор, а его события никак не связаны с гридом
У него есть свои собственные способы контролировать манипуляции с данными: BindingNavigator.DeleteItem .
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698470
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныandreymxпропущено...
мне это не нравится, потому как еще есть навигатор, а его события никак не связаны с гридом
У него есть свои собственные способы контролировать манипуляции с данными: BindingNavigator.DeleteItem .считаю неверным на одно событие делать обработки в разных местах
а потом пользователь большую кнопку попросит - там тоже обрабатывать?
Хотелось бы одно место найти приложения усилий
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698506
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, всем спасибо за варианты, у кого есть ещё, предлагайте, рассмотрю любые
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698518
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

удаление дорогая и сложная операция (особенно если есть связи в датасет), потому по возможности не надо ее допустить
так что надо отказ повесить на все кнопки и т.д. чтобы предотвратить удаление
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698545
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andreymxКак ее принято централизовано обрабатывать?
Аварийных завершений не должно быть!
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698587
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,
спасибо, буду смотреть



ViPRosandreymx,
удаление дорогая и сложная операция (особенно если есть связи в датасет), потому по возможности не надо ее допуститьполностью согласен

ViPRosтак что надо отказ повесить на все кнопки и т.д. чтобы предотвратить удалениеполностью не согласен
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698603
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxViPRosтак что надо отказ повесить на все кнопки и т.д. чтобы предотвратить удалениеполностью не согласен
Ты можешь согласиться или нет, но придется, если будешь реально этим делом пользоваться
такие попытки/намерения надо обрубить в зародыше, до запуска процесса ("удаление", в данном случае)
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698646
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxполностью не согласен
У винформсового DVG могут быть самые разные источники данных - например, реализации IList<T> (просто List<T>), у которого вообще нет никаких событий об изменении содержимого, и нет никаких никаких методов для отката таких изменений. И даже если его цеплять к DGV через BindingSource, то и это мало чем поможет. Поэтому в целях общности подхода я лично все такие проверки делаю на уровне UI, а не на уровне источника данных.
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698691
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сон Веры Павловны, серебряную пулю отливаете?

Будет List, будем по другому.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
private void saveToolStripButton_Click(object sender, EventArgs e)
        {
            solveDeleteRow();
        }
...

private void myDataGridView_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            solveDeleteRow();
        }

...
private void solveDeketeRow() {
           if (ConfirmDeleteRecord())
                myDataGridView.EndEdit();
            else 
                myDataGridView.CancelEdit();
}



=============
Для andreymx .

Выкиньте Вы bindingNavigator.

На основании длительных наблюдений над пользователями я выявил, что они не пользуются кнопками навигации. Им быстрее и привычнее прокрутить.

Единственные полезные кнопки - Удалить и Сохранить.
Лично мне удобнее сделать их как обычные кнопки, что бы не нужно было бороться с действиями по умолчанию кнопок навигатора.
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698693
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ошибочка вышла
Cat2
Код: c#
1.
2.
3.
4.
5.
private void deleteToolStripButton_Click(object sender, EventArgs e)
        {
            solveDeleteRow();
        }
...
...
Рейтинг: 0 / 0
удаление строк с подтверждением
    #39698735
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
О черт! Без исходников под рукой
private void deleteToolStripButton_Click(object sender, EventArgs e)
{
if (ConfirmDeleteRecord()){
myBindingSource.RemoveCurrent();
myBindingSource.EndEdit();
}
}
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / удаление строк с подтверждением
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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