andreybear
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору { Поля: ID - идентификатор записей (на этом поле основан ключ целевой таблицы БД); BOOL - поле, которое отвечает за отображение "положения" ("вкл", "выкл") колонки таблицы c Properties = RadioGroup. В Items создан 1 TcxRadioGroupItem, свойства Type = Smallint, Value = 1. } procedure TForm1.DBVeiwEditChanged(Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem); // Событие, возникающее при изменении записи в таблице var RecID: integer; // идентификтор исходной записи begin // Если изменяется целевая колонка (можно также проверить по имени колонки) if AItem.Index = 0 then // Если записей в наборе больше 1 if odsTest.RecordCount > 1 then begin // Идентификатор текущей записи RecID := odsTestID.AsInteger; { Можно записать odsTest.RecNo, только надо проверить допустима ли навигация по "по номеру записи", например, var RecNo: integer; ... if odsTest.IsSequenced then RecNo := odsTest.RecNo; Либо использовать навигацию по закладкам для возврата к текущей записи. var BkMrk: TBookmark; ... BkMrk := odsTest.GetBook; } // Отключение связанных с DataSet контролов odsTest.DisableControls; // Установка "курсора" на первую запись набора odsTest.First; // Перебор всех записей набора while not odsTest.Eof do begin // Если идентификатор записи не равен исходному if odsTestID.AsInteger <> RecID then begin // Если RadioButton в состоянии "вкл" if odsTestBOOL.AsInteger <> 0 then begin // Первод набора в режим редактирования odsTest.Edit; // Установка значения поля odsTestBOOL.Value := 0; { Либо odsTest['BOOL'] := 0; Либо odsTest.FieldByName('BOOL').AsInteger := 0; Либо odsTest.FieldValues['BOOL'] := 0; Либо odsTest.Fields[0].AsInteger := 0; } // "Подтверждение" записи odsTest.Post; end; // if odsTestBOOL.AsInteger <> 0 then end // if odsTestID.AsInteger <> RecID then // Иначе установка RadioButton в положение "вкл", если не установлен else if odsTestBOOL.Value <> 1 then begin odsTest.Edit; odsTestBOOL.Value := 1; odsTest.Post; end; // if odsTestBOOL.Value <> 1 then // Следующая запись набора odsTest.Next; end; // while not odsTest.Eof do // Возврат к исходной записи odsTest.SearchRecord('ID', RecID, [srFromBeginning]); { Либо odsTest.Locate('ID', RecID, []); Если записывался odsTest.RecNo, то odsTest.RecNo := RecNo; Если создавалась закладка, то if odsTest.BookmarkValid(BkMrk) then begin odsTest.GotoBookmark(BkMrk); odsTest.FreeBookmark(BkMrk); end; } // Подключение связанных с DataSet контролов odsTest.EnableControls; end; end; |