Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2015, 18:50   #1
ifreestyler
Пользователь
 
Регистрация: 03.12.2014
Сообщений: 33
По умолчанию Редактирование ячеек в dbgridEh

Всем привет!
Возникла такая проблема с dbgridEh. Чтобы отредактировать ячейку нужно два раза кликнуть по ней, а чтобы выйти из режима редактирования нужно кликнуть на соседнюю ячейку или нажать enter. Но вот если кликнуть в любое пустое место грида то ячейка так и остается в режиме редактирования.
Может кто то подскажет как завершать редактирование если кликнуть на любое пустое место грида?
ifreestyler вне форума Ответить с цитированием
Старый 13.01.2015, 20:58   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

DBGridEx не использую.
Вот вариант для простого DBGrid:
Код:
procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if DBGrid1.DataSource.State=dsEdit then
DBGrid1.DataSource.DataSet.Post;
DBGrid1.EditorMode:=False;
end;
kropotkina-alice вне форума Ответить с цитированием
Старый 14.01.2015, 16:47   #3
ifreestyler
Пользователь
 
Регистрация: 03.12.2014
Сообщений: 33
По умолчанию

Огромное спасибо! Немного модернизировал код и всё заработало как надо. Пришлось добавить проверку, что кликаю на пустое место грида, а не на ячейку, иначе при клике режим редактирования сразу выключался, не давай войти в него.
Кому интересно выкладываю код:
Код:
var
  cc,rr:integer;  
begin
  TCustomDrawGridEh(dbgrdh3).MouseToCell(x,y,cc,rr);
  if (cc = -1) and (rr = -1 ) and (dbgrdh3.EditorMode = true) then begin
    try
      if dbgrdh3.DataSource.DataSet.State in [dsEdit, dsInsert] then dbgrdh3.DataSource.DataSet.Post;
    except
    end;
    dbgrdh3.EditorMode := false;
  end;
end;
ifreestyler вне форума Ответить с цитированием
Старый 14.01.2015, 18:43   #4
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от ifreestyler Посмотреть сообщение
Пришлось добавить проверку, что кликаю на пустое место грида, а не на ячейку, иначе при клике режим редактирования сразу выключался, не давай войти в него.
Это совершенно лишнее.
Редактирование включается автоматом, когда вы начинаете изменять содержимое ячейки.
Можете проверить...
kropotkina-alice вне форума Ответить с цитированием
Старый 14.01.2015, 19:16   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Там просто при клике на заголовки колонок без проверки на -1 проблемки будут, а так Ok. При клике на рабочей ячейке это событие по моему вообще не происходит, но это good
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.01.2015 в 19:20.
Аватар вне форума Ответить с цитированием
Старый 15.01.2015, 11:32   #6
ifreestyler
Пользователь
 
Регистрация: 03.12.2014
Сообщений: 33
По умолчанию

Цитата:
Редактирование включается автоматом, когда вы начинаете изменять содержимое ячейки.
Не спорю..Но если на onMouseDown повесить событие где мы делаем
Код:
dbgrdh3.EditorMode := false;
то в режим редактирования мы в принципе попасть не можем, потому что не успев войти мы из него выходим.
ifreestyler вне форума Ответить с цитированием
Старый 15.01.2015, 17:45   #7
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Это ваши теоретические изыски. А попробовать реально вы так и не решились?
Вот нормально работает этот обработчик, хоть ты тресни!
Код:
procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if DBGrid1.DataSource.State in [dsEdit,dsInsert] then
DBGrid1.DataSource.DataSet.Post;
DBGrid1.EditorMode:=False;
end;
И спокойно я редактирую в любой ячейке...
С чего вы взяли, что "в режим редактирования мы в принципе попасть не можем, потому что не успев войти мы из него выходим"???
Или вы определяете возможность редактирования исключительно по индикатору???
kropotkina-alice вне форума Ответить с цитированием
Старый 15.01.2015, 18:54   #8
ifreestyler
Пользователь
 
Регистрация: 03.12.2014
Сообщений: 33
По умолчанию

Попробовать на DbGrid я не решился, да)
Но на DbGridEh не прокатило..чтобы отредактировать ячейку надо двойной клик сделать и тогда DBGrid1.EditorMode становится True, но отрабатывает событие MouseDown и ставит EditorMode в False.
Если поставить begin после Then чтобы обе строки отрабатывали только при dsEdit тогда другое дело. Хотя и это не помогло мне и пришлось извращаться дальше.
Главное что Вы меня вывели на правильный путь и за это спсибо!
ifreestyler вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение ячеек в DBgridEh (Ehlib) firephenix Общие вопросы Delphi 6 13.05.2014 12:01
Объединение ячеек по горизонтали или вертикали в DBGridEh в Ehlib? RusMikle Компоненты Delphi 0 08.12.2013 23:40
Редактирование ячеек TStringGrid Daria7 Компоненты Delphi 2 16.04.2013 00:35
Редактирование ячеек в datagridview IlyaXXX Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 13.10.2011 17:10
Запрет на редактирование ячеек от даты valerij Microsoft Office Excel 6 12.12.2010 21:46