1000명의 사람이 있다고 할 때 가족별로 구분하려고 합니다.
가족별로 구분할 수 있는 필드는 '전화번호'가 되구요, 전화번호로 sorting했구요.
구분하는 방법은 디비그리드에 사람의 정보를 가족별로 색깔로 구분하려고 합니다.
예를 들면 첫번째 가족(전화번호가 같은 사람) 4명은 파란색으로, 다음 전화번호 같은 사람들 3명은 빨간색으로, 그 다음 3명은 다시 파란색으로, 다음 5명은 빨간색으로...... 이렇게 계속 진행해서 하려고 합니다.
같은 정보를 가지고 있는 필드는 전화번호필드만 있구요
그래서 다음과 같이 구현해 보았습니다.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: GridDrawState);
begin
with Sender as TDBgrid, DataSource.DataSet do
begin
if Query1.FieldByName('전화번호').AsString = TempCode then
else
if TempColor = clBlue then
TempColor := clred
else
TempColor := clBlue;
DrawField(Column.Field.DisplayText, Rect, Canvas,Column.Font, Column.Alignment, [fsBold], clBlack, TempColor);
TempCode := Query1.FieldByName('전화번호').AsString;
end;
end;
DrawField는 그리드 Cell에 색을 넣어주는 함수라고 생각하면 됩니다.
위와 같이 하면 처음 화면은 잘 그려지는데 문제는 현재 활성 Cell을 움직일 경우 다시 말하면 현재 보이는 셀의 끝을 지나 아래로 내려간다거나 오른쪽으로 내려가서 디비그리드의 내용이 Repaint 될 때 색의 순서가 되바뀌고 엉키는 현상이 발생하더라구요
이 문제좀 도움받을 수 없을까요?
색을 칠해줘야 댄다구 생각하는데여...
레코드 수가 고정적이면... 고정해서 사용하면 좋겠는데...
유동적이면.. 얼마나 많은 배열을 잡고 있어야 할지...
밑에 코딩 방식으로 하면.. 선택 바가 지나가고 나면..
그 레코드 다시 그려주는데.. 그때 색도 변하게 됌니다..
그리고.. 여러가지 스크롤 이동이나.. 기타 등등...
색이 2가지가 돌아가면서 바꾸는 방법은 별로라고 생각 드네요..