Текущий архив: 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