안녕하세요.
델파이를 독학하고 있는 초보자입니다.
2개의 DBGrid의 동기화 하는데 문제가 생겨 고수님들의
도움을 청합니다.
DBGrid1 -> DataSource1 -> Table1
DBGrid2 -> DataSource2 -> Table2
Table1과 Table2는 Record길이나 Field구성이 같고
Field 값만 조금다른데,
DBGrid1 과 DBGrid2 의 Scroll되는 상태를 동기화 시키기 위해
DataSourceDataChange Event 에 다음과 같이 코딩했는데
문제점이 생겼습니다.
Table2.RecNo := Table1.RecNo;
DBGrid1의 Record이동시 처음에는 DBGrid2도 동기화되어 동시에
동일 RecordNo, 동일 Scroll Position을 유지하지만
DBGrid1 이 화면의 중간쯤을 지나면 DBGrid1은 Scroll 이 안되고
Record만 이동하는데 DBGrid2는 Scroll 이 됩니다.
즉 DBGrid2가 화면의 맨 마지막에서 Scroll이 안되고 중간에서
Scroll이 되어 버립니다.
DBGrid1과 DBGrid2가 동일 Record의 내용을 보여주어야 하는데
애를 먹고 있습니다.
고수님들의 고언 부탁드립니다.
좋은 하루되세요....
> 안녕하세요.
> 델파이를 독학하고 있는 초보자입니다.
>
> 2개의 DBGrid의 동기화 하는데 문제가 생겨 고수님들의
> 도움을 청합니다.
>
> DBGrid1 -> DataSource1 -> Table1
> DBGrid2 -> DataSource2 -> Table2
>
> Table1과 Table2는 Record길이나 Field구성이 같고
> Field 값만 조금다른데,
> DBGrid1 과 DBGrid2 의 Scroll되는 상태를 동기화 시키기 위해
>
> DataSourceDataChange Event 에 다음과 같이 코딩했는데
> 문제점이 생겼습니다.
>
> Table2.RecNo := Table1.RecNo;
>
> DBGrid1의 Record이동시 처음에는 DBGrid2도 동기화되어 동시에
> 동일 RecordNo, 동일 Scroll Position을 유지하지만
> DBGrid1 이 화면의 중간쯤을 지나면 DBGrid1은 Scroll 이 안되고
> Record만 이동하는데 DBGrid2는 Scroll 이 됩니다.
> 즉 DBGrid2가 화면의 맨 마지막에서 Scroll이 안되고 중간에서
> Scroll이 되어 버립니다.
>
> DBGrid1과 DBGrid2가 동일 Record의 내용을 보여주어야 하는데
> 애를 먹고 있습니다.
>
> 고수님들의 고언 부탁드립니다.
>
> 좋은 하루되세요....
///////////////////////////////////////////////////////////
아래 예를 들어봤습니다. 참고해보시면 다른 좋은방법도 생길지 모르겠네요.
각 레코드는 가리키는데요 화면위치상은 일치를하지안습니다.
그리고 마우스로 클릭시도 위를 변화게하려면 SendMessage등을 써서 키다운이벤트를 먹게할 수 도 있거든요. shift나 ctrl키누르면서 마우스 클릭하면 되는것처럼 코딩히시면될거구요.
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Table1.GetBookmark <> nil then begin
Table2.GotoBookmark(Table1.GetBookmark);
if key = 38 then Table2.Prior
else if key = 40 then Table2.Next;
end;
end;
procedure TForm1.DBGrid2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Table1.GetBookmark <> nil then begin
Table1.GotoBookmark(Table2.GetBookmark);
if key = 38 then Table1.Prior
else if key = 40 then Table1.Next;
end;
end;