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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2014, 07:33   #1
opencloser
Пользователь
 
Регистрация: 04.03.2014
Сообщений: 15
По умолчанию cxGrid и CachedUpdates=True

В бд использована категоризация по t_attribute.id_attribute, поэтому код таков:
data set:
Код:
select
	IFNULL(aaf.`id_apparat`,aal.`id_apparat`) as 'id_apparat',
	a.`id_attribute`,
	a.`attribute_name`,
    IFNULL(aaf.`value`,aal.`value`) as 'value',
    at.`name`
from 
	`t_attribute` a
    left join `cr_attribut_apparat_type` aat on(a.`id_attribute`=aat.`id_attribute`)      
    left join `t_attribute_type` at on(a.`id_attribute_type`=at.`id_attribute_type`)
    left join `cr_app_attr_field` aaf on(a.`id_attribute`=aaf.`id_attribute`)
    left join `cr_app_attr_list` aal on(a.`id_attribute`=aal.`id_attribute`)
    
where
	aat.`id_apparat_type`=1 
    and (aaf.`id_apparat`=:id_apparat
    or aal.`id_apparat`=:id_apparat)
в нем же Update SQL
Код:
UPDATE cr_app_attr_field  
SET 
  value=:value
WHERE
  id_apparat=:Old_id_apparat and id_attribute=:Old_id_attribute;


UPDATE cr_app_attr_list  
SET 
  value=:value
WHERE
  id_apparat=:Old_id_apparat and id_attribute=:Old_id_attribute;
Выставил:
Код:
CachedUpdates=True
в cxGridTableView на onEditing ставлю(настраиваю как я буду его редактировать)
Код:
if DataModule2.t_apparat_settings.FieldByName('name').AsString='Поле' then
  begin
    TextEdit:=TcxTextEditProperties.Create(Sender);
    AItem.Properties:=TextEdit;
    
  end;
  if DataModule2.t_apparat_settings.FieldByName('name').AsString='Поле со списком' then
  begin 
    AItem.Properties:=LookupComboBox;
  end;
  if DataModule2.t_apparat_settings.FieldByName('attribute_name').AsString='Путь к файлу лога' then
  begin
    ButtonEdit:=TcxButtonEditProperties.Create(Sender);
    ButtonEdit.OnButtonClick:=cxGrid1DBTableView1valuePropertiesButtonClick;
    AItem.Properties:=ButtonEdit;
  end;
Притом для LookupComboBox использован dataSet(MasterField=id_attribute) который привязан к dataSet-у грида.
Есть две кнопки: Сохранить(CommitUpdates), отменить(Refresh).

Проблема заключается в том, что если при помощи LookupComboBox мы изменили значение в cxGrid-е, то следующие изменения(в других полях) при помощи LookupComboBox при нажатии на кнопку сохранить, не будут записаны в бд. Думаю необходимо сделать DataSet.post у cxGrid-а, но вот что то с событием не могу определиться, буду рад за подсказки.
opencloser вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TcxLookupComboBox в cxGrid Net09 Компоненты Delphi 0 15.03.2010 00:21
Удаление в cxGrid Arteom Компоненты Delphi 2 27.03.2008 09:44
cxGrid KAMENYKA Компоненты Delphi 0 08.02.2008 13:08