Главная страница
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.025 c
3-97944
maxim2
2002-09-09 06:29
2002.09.30
Не могу понять где ошибка?


1-98200
Exteris
2002-09-18 13:48
2002.09.30
TEdit


14-98262
VEG
2002-09-01 14:19
2002.09.30
Издеваемся над вениками:-)


1-98172
Taa
2002-09-17 18:14
2002.09.30
Работа с массивами Variant


3-97970
Kolyan!
2002-09-09 10:47
2002.09.30
Можно ли работать с dBase через dbExpress?