Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.30;
Скачать: CL | DM;

Вниз

Редактироватние Calcalated поля   Найти похожие ветки 

 
Урри   (2002-09-02 12:51) [0]

Имеется TADODataSet, к нему привязан TDBGrid. В датасете есть calculated поле, которое вычисляется на основе некоторых других полей, в гриде не отображаемых. Хотелось бы, чтобы была также возможность делать наоборот, то есть, редактировать это поле в гриде, и на основе его значения вычислять и присваивать значения для этих не отображаемых полей. Возможно ли сделать такое с помощью стандартных компонент дельфи?


 
oss   (2002-09-02 14:46) [1]

возможно


 
Урри   (2002-09-02 15:04) [2]

ээээ ... и как?
Как я ни пытался, грид не дает редактировать calculated поля :((


 
DeepProg ©   (2002-09-02 18:17) [3]

По-моему поле fkCalculated не может редактироваться пользователем в DBGird вручную, его надо вычислять программно.

Если тебе так важно сделать именно это поле редактируемым, то можно сделать его "якобы редактируемым", иллюзию для юзера создать. Хотя, это, конечно далеконе самое удачное решение... :/


 
oss   (2002-09-03 10:28) [4]

2 Урри,
DeepProg © все сказал, ты можешь сделать его якобы редактируемым


 
Jony ©   (2002-09-03 11:03) [5]

>Урри
В DBGrid вычисляемое поле редактировать не удастся. Если можешь, вставь его как вычисляемое в Select ADODataSet-а (если он у тебя там есть), тогда его можно будет редактировать. В противном случае - делай дополнительную панель с полями записи в DBEdit-ах, а из вычисляемого поля переноси информацию в обычный Edit, редактируй ее там, на ее основе вычисляй поля, участвующие в твоем вычисляемом, и тогда получишь то, что хочешь.


 
Vov ©   (2002-09-03 12:17) [6]

я делал для чисел, но принцип одинаковый:
заводится какой-нибудь TStringList, по KeyDown на gride можно запускать небольшую модальную формочку с полем ввода про ModalResult=ID_OK писать значение в список знач. кл. поля и получаемое значение:
pos := CountList.IndexOf( DataSet.FieldByName("idXX").AsString );
if pos > -1 then
begin
if fff.returnDigit > 0 then
CountList.Objects[pos] := TObject( fff.returnDigit )
else CountList.delete(pos);
end else CountList.AddObject( DataSet.FieldByName("id_prod").AsString, TObject( fff.returnDigit ) )


procedure TfrProductOst.ADOQuery1CalcFields(DataSet: TDataSet);
var
pos : Integer;
begin
DataSet.FieldByName("id").Value := Abs(DataSet.RecNo);
pos := CountList.IndexOf( DataSet.FieldByName("idXX").AsString );
if pos > -1 then
DataSet.FieldByName("count").Value := Integer(CountList.Objects[pos])
else DataSet.FieldByName("count").Value := 0;
end;

можно правда ловить значение и при AfterEdit, но с формой безопаснее :)
Чтобы, пересчитались CalcFilds надо сделать requery или на любом поле Edit, Post


 
Урри   (2002-09-10 07:10) [7]

Всем спасибо, сделал немного не так - перекрыл у грида метод CanEditModify, чтобы возвращал true для calculated полей - все заработало как надо - грид дает редактировать и по событию OnChange в TColumn пересчитываю нужные мне не-Calculated поля



Страницы: 1 вся ветка

Текущий архив: 2002.09.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
1-98210
Андрусь
2002-09-18 12:39
2002.09.30
как по виндовскому Handlу получить pointer на объект


7-98380
ВладТен
2002-07-22 03:55
2002.09.30
Как установках принтера изменить некоторые параметры


14-98307
Ghost.
2002-08-30 09:13
2002.09.30
Очередная перекличка


1-98128
Макс-Баландин
2002-09-17 15:38
2002.09.30
Смена иконки..


1-98223
maxim2
2002-09-18 12:26
2002.09.30
Как убрать Title у формы, но при этом оставить бордюр формы