Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Редактироватние Calcalated поля [D5]


Урри ©   (2002-09-02 12:51:00) 

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


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

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


Vov   (2002-09-03 12:17:00) [2]

я делал для чисел, но принцип одинаковый:
заводится какой-нибудь 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


Jony   (2002-09-03 11:03:00) [3]

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


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

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


DeepProg   (2002-09-02 18:17:00) [5]

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

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


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

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


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

возможно


Наверх

Титульная страница Поиск, карта сайта Написать письмо