Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение данных через DBGrid, при переходе Cancel а хочу Post 
:(
    Опции темы
superVad
Дата 12.6.2012, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Добрый день.

Редактирую таблицу через грид. При создании новой строки происходит некое автозаполнение полей через датасет. И пользователь, может быть, ничего уже менять не будет.
Вот тут то и загвоздка. Если в гриде ни одно поле не переходило в режим редактирования, то он, при переходе на новую строку, пошлет датасету Cancel.
А мне надо, что бы при переходе на другую строку делался Post.

Я мог бы и сам делать Post после автозаполнения - но тогда не отменить создание строки по эскейпу.

Склоняюсь к программному редактированию грида (как то так). Но как?
PM MAIL   Вверх
Akella
Дата 12.6.2012, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(superVad @  12.6.2012,  18:47 Найти цитируемый пост)
Если в гриде ни одно поле не переходило в режим редактирования,

 smile

Добавлено через 28 секунд
Цитата(superVad @  12.6.2012,  18:47 Найти цитируемый пост)
А мне надо, что бы при переходе на другую строку делался Post.

а свойства грида изучить - это так сложно?

Добавлено через 47 секунд
CancelOnExit := False
PM MAIL   Вверх
superVad
Дата 12.6.2012, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Цитата(Akella @  12.6.2012,  18:24 Найти цитируемый пост)
CancelOnExit := False

И что оно по твоему делает? Ну ты же изучил свойства грида! smile
PM MAIL   Вверх
Akella
Дата 12.6.2012, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Вообще, при переходе на другую строку по умолчанию выполняется POST
PM MAIL   Вверх
superVad
Дата 12.6.2012, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Цитата(Akella @  12.6.2012,  19:52 Найти цитируемый пост)
Вообще, при переходе на другую строку по умолчанию выполняется POST


dgCancelOnExit    When the user exits the grid from an inserted record to which the user made no modifications, the inserted record is not posted to the dataset. This prevents the inadvertent posting of empty records.

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

Вопрос открыт!

Это сообщение отредактировал(а) superVad - 12.6.2012, 21:08
PM MAIL   Вверх
Akella
Дата 12.6.2012, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



да, был не прав, не проникся вопросом  smile

Добавлено через 44 секунды
Но почему открыт?


Цитата(superVad @  12.6.2012,  18:47 Найти цитируемый пост)
А мне надо, что бы при переходе на другую строку делался Post.


Цитата(Akella @  12.6.2012,  20:52 Найти цитируемый пост)
 при переходе на другую строку по умолчанию выполняется POST 


Что не так?
PM MAIL   Вверх
superVad
Дата 12.6.2012, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Цитата(Akella @  12.6.2012,  20:26 Найти цитируемый пост)
Что не так?

При выходе из грида Post. Не при переходе на другую строчку.
При переходе - если не было изменений через грид, то - Cancel.
PM MAIL   Вверх
Akella
Дата 13.6.2012, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(superVad @  12.6.2012,  22:36 Найти цитируемый пост)
При выходе из грида Post. Не при переходе на другую строчку.


Это как надо или как сейчас и надо исправить такое поведение?
Ты вообще, можешь сформировать вопрос внятно?
PM MAIL   Вверх
superVad
Дата 13.6.2012, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Цитата(Akella @  13.6.2012,  09:43 Найти цитируемый пост)
Это как надо или как сейчас и надо исправить такое поведение?Ты вообще, можешь сформировать вопрос внятно?

Мне надо заставить грид "подумать", что в новой строчке были изменения внесенные через грид. Тогда он при переходе на следующую строку сделает Post а не Cancel.

dgCancelOnExit работает только для выхода из грида (всего грида, на другой контрол какой то), на переход по строчкам он не влияет. Я проверял, и так написано в справке (я выше привел кусочек оттуда).
PM MAIL   Вверх
Akella
Дата 13.6.2012, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Т.е. так?
1. Пользователь нажал Insert, добавилась новая строка.
2. Пользователь ничего не меняет в ячейках и нажимает клавишу вверх.
3. Т.к. ничего не менялось в новой записи, то нужно выполнять Cancel.

1. Пользователь нажал Insert, добавилась новая строка.
2. Пользователь что-то меняет в ячейках и нажимает клавишу вверх.
3. Т.к. в новой записи что-то поменялось, то нужно выполнять Post.

Добавлено через 2 минуты и 15 секунд
Забей. Дай пользователю свободу. Пусть сам думает, решает, учится на ошибках, что если перейти на другую строку, то в любом случае даже пустая запись сохраниться. Если он передумал, то пусть нажмет Escape и будет ему счастье.

Добавлено через 3 минуты и 36 секунд
Вариант второй.
Есть 1 или несколько полей, обязательных для заполнения. Анализируй и выдавай сообщение или отменяй Post в событии BeforPost.

Добавлено через 5 минут и 39 секунд
Возможно в используемом гриде или датасете уже реализовано что-то похожее. Просто датасет сам не добавит "пустую" запись.
PM MAIL   Вверх
superVad
Дата 13.6.2012, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



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

Сейчас делаю Пост сразу после инсетра и автозаполнения, но это не очень удобно - т.к. уже по ескейпу не отменишь создание этой строки.

Я уже пробовал делать Пост в BeforeScroll - но он тогда не переходит при первом нажатии и ескейп не срабатывает.

Собственно все мои проблемы находятся вот тут:
Код

procedure TCustomDBGrid.KeyDown(var Key: Word; Shift: TShiftState);
...
  procedure PriorRow(Select: Boolean);
  begin
    with FDatalink.Dataset do
      if (State = dsInsert) and not Modified and FDataLink.EOF and
        not FDatalink.FModified then
        Cancel
      else
        DoSelection(Select, -1);
  end;
...


Вот думаю - с помощью Шаманского метода Geo - вывести FDatalink из private и проставить ему FDatalink.Dataset.Modified или FDatalink.FModified...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


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

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


 




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


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

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