XPSDim
Newbie | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору To Alex47 RecordIndex := TcxGridDBTableView(cxGrid.FocusedView).DataController.FocusedRecordIndex; RecordId := TcxGridDBTableView(cxGrid.FocusedView).DataController.GetRecordId(RecordIndex); tmpDataCont2:=TcxGridDBTableView(cxGrid.FocusedView).DataController.GetDetailDataController(RecordIndex,0); TcxGridDBDataController(tmpDataCont2).LocateByKey(tblItemsDetal.FieldByName('id_master').AsInteger); tmpDataCont3:=TcxGridDBDataController(tmpDataCont2).GetDetailDataController(???,0); Нашел контроллер 2-го уровня. А вот как получить контроллер 3-го уровня? Ведь фокус все равно остается на первом уровне, даже после TcxGridDBDataController(tmpDataCont2).LocateByKey(tblItemsDetal.FieldByName('id_master').AsInteger); Добавлено: To Alex47 Ураа!! Получилось. Так все это выглядит. procedure TfrmMain.tbFindClick(Sender: TObject); var RecordIndex, RecordId, i: integer; tmpDataCont2, tmpDataCont3: TcxCustomDataController; begin tbCollapse.Click; With TfrmFind.Create(Application) do begin if ShowModal=mrOk then if cbKind.Text='Ïðàéñîâûé íîìåð' then begin if not tblItemsDetal.Locate('price_num',edtText.Text,[]) then Showmessage('Íè÷åãî íå íàéäåíî') else begin RecordIndex := TcxGridDBTableView(cxGrid.FocusedView).DataController.FocusedRecordIndex; RecordId := TcxGridDBTableView(cxGrid.FocusedView).DataController.GetRecordId(RecordIndex); tmpDataCont2:=TcxGridDBTableView(cxGrid.FocusedView).DataController.GetDetailDataController(RecordIndex,0); for i:=0 to TcxGridDBDataController(tmpDataCont2).GridView.ViewData.RecordCount-1 do begin if tblItemsDetal.FieldByName('id_master').AsInteger= strToInt(TcxGridDBDataController(tmpDataCont2).GridView.ViewData.Records[i].DisplayTexts[2]) then TcxGridDBDataController(tmpDataCont2).GridView.ViewData.Records[i].Focused:=True; end; RecordIndex := TcxGridDBTableView(cxGrid.FocusedView).DataController.FocusedRecordIndex; RecordId := TcxGridDBTableView(cxGrid.FocusedView).DataController.GetRecordId(RecordIndex); tmpDataCont3:=TcxGridDBTableView(cxGrid.FocusedView).DataController.GetDetailDataController(RecordIndex,0); for i:=0 to TcxGridDBDataController(tmpDataCont3).GridView.ViewData.RecordCount-1 do begin if tblItemsDetal.FieldByName('price_num').AsInteger= strToInt(edtText.Text) then TcxGridDBDataController(tmpDataCont3).GridView.ViewData.Records[i].Focused:=True; end; end; end; end; end; Только как-то все больно закручено. Неужели нельзя проще? |