는 설정의 문제인가, 아니면이 기능을 프로그래밍해야?
예, 설정에 대한 질문이며 코드가 필요하지 않습니다. 그러나 분명히 먼저 프로젝트를 정렬해야한다고 생각하는 프로젝트의 문제가 있습니다.
"그리드가 눈에 띄지 않는 다른 임의의 레코드로 점프합니다."라고 말하면 잘못된 곳에서 시작하여 원하는대로 탐색 동작을 얻으려는 것처럼 들립니다. 그것은 분명히 일어나서는 안된다. 그리고 내 cxGrid 프로젝트에서는 그렇지 않습니다.
어쨌든 Object Inspector에서 cxGridDBTableView를 표현하면 "나무를 보려면 나무를 보는 것이 어렵습니다"라는 것을 알게되었습니다. 그러면 코드에서 그리드를 완전히 생성하는 프로젝트를 사용하는 것입니다. 아래를 참조하십시오.
아래 코드는 완전히 독립적이며 이벤트 처리기, 영구적 인 TFields 등을 필요로하지 않습니다. 시도 할 경우 기본적으로 생성 된대로 그리드 은을 위아래로 지원합니다 및 커서 키를 사용하여 왼쪽 및 오른쪽 셀 탐색. 유일한 예외는 현재 셀 내용을 편집 할 때 왼쪽 및 오른쪽 키가 셀 탐색에 작동하지 않는다는 것입니다. 그러나 왼쪽을 사용하여 가 당신이 세포 밖으로 이동 할 수 있습니다 라인 바로 데이터 세트로 다시 편집을 게시 셀에서 편집하는 동안 Enter
를 눌러 다음
cxView.DataController.Options := cxView.DataController.Options + [dcoImmediatePost];
, 그리드의 주석을 해제하는 경우 - 또는 오른쪽 화살표 키. 코드에서 키 처리를 처리하여이 효과를 얻는 방법이 분명하지만 적어도 dcoImmediatePost
메서드는 코드가 필요 없다는 이점이 있습니다.
앱이 시작되면 초점이 맞춰진 LH 셀을 제외하고 상단 행이 "강조 표시됨"(기본적으로 파란색으로 표시됨)을보아야합니다.
이 예제는 프로젝트에서 "점프"의 원인을 확인하는 데 도움이되며 커서 키 탐색과 관련하여 얻고 자하는 바를 설명하는 데 도움이 될 수 있습니다.
코드 내가 문제를 발견 생각 셀 수없이 많은 실험 후
procedure TForm1.CreateGrid;
begin
cxGrid := TcxGrid.Create(Self);
cxGrid.Parent := Self;
cxGrid.Width := 400;
cxLevel := cxGrid.Levels.Add;
cxLevel.Name := 'Firstlevel';
cxView := cxGrid.CreateView(TcxGridDBTableView) as TcxGridDBTableView;
cxView.Name := 'ATableView';
// Uncomment the following line to make the grid respond to the `Enter` key by posting any pending change to the data row
// cxView.DataController.Options := cxView.DataController.Options + [dcoImmediatePost];
cxView.DataController.KeyFieldNames := 'ID';
cxLevel.GridView := cxView;
cxView.DataController.DataSource := DS1;
cxView.DataController.CreateAllItems;
end;
function CreateField(AFieldClass : TFieldClass; AOwner : TComponent; ADataSet : TDataSet;
AFieldName, AName : String; ASize : Integer; AFieldKind : TFieldKind) : TField;
begin
Result := AFieldClass.Create(AOwner);
Result.FieldKind := AFieldKind;
Result.FieldName := AFieldName;
Result.Name := AName;
Result.Size := ASize;
Result.DataSet := ADataSet;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
Field : TField;
begin
Field := CreateField(TAutoIncField, Self, CDS1, 'ID', 'CDS1ID', 0, fkData);
Field := CreateField(TBooleanField, Self, CDS1, 'Marked', 'CDS1Marked', 0, fkData);
Field := CreateField(TStringField, Self, CDS1, 'Name', 'CDS1Namefield', 20, fkData);
Field := CreateField(TStringField, Self, CDS1, 'Value', 'CDS1Valuefield', 20, fkData);
CDS1.CreateDataSet;
CDS1.IndexFieldNames := 'ID';
for i := 1 to 5 do begin
CDS1.Insert;
CDS1.FieldByName('Marked').AsBoolean := Odd(i);
CDs1.FieldByName('Name').AsString := 'Name' + IntToStr(i);
CDs1.FieldByName('Value').AsString := 'Value ' + IntToStr(i);
CDS1.Post;
end;
CDS1.First;
CreateGrid;
ActiveControl := cxGrid;
end;
DevEx 지원 포럼에 질문 해 보셨습니까? –
리플렉션에서이 q가 MCVE를 포함하도록 편집 될 때까지는 "점프"가 cxGrid **의 기본 동작이 아니므로 주제를 벗어나는 것으로 투표 할 것입니다 ** 그리고 화살표 키 탐색이 기본값입니다 cxGrid의 경우. 따라서 q에는 문제를 재현 할 수있는 충분한 정보가 있어야합니다. – MartynA
@MartynA - 정렬 순서가 없습니다. – user763539