Q&A

  • DbGrid에서 Row별로 색깔을 변경할수가 없나요?
DbGrid에서 Row별로 색깔을 변경할수가 없나요?

Column별로는 속성창을 변경시켜주거나, Color를 쓰면 되는데

그리드의 특정 한 칼럼의 값에 따라서 그 Row의 색깔을 변경하는

프로그램을 짜고 싶은데 방법이 없나요?

1  COMMENTS
  • Profile
    김영대 1999.09.03 19:10
    hohoant 께서 말씀하시기를...

    > DbGrid에서 Row별로 색깔을 변경할수가 없나요?

    > Column별로는 속성창을 변경시켜주거나, Color를 쓰면 되는데

    > 그리드의 특정 한 칼럼의 값에 따라서 그 Row의 색깔을 변경하는

    > 프로그램을 짜고 싶은데 방법이 없나요?



    아래 예제를 참고해보세요(요구하시는 정답은 아니지만 비슷합니다)

    그리고 이런 문제는 Delphi 관련 사이트의 Tip 란에서

    DBGrid, Draw 찾아보시면 자료가 많이 나옵니다

    질문하시기전에 찾아보시면 더 많은 정보를 얻을 수 있습니다



    -----------------------------------------------------------------

    TDBGrid의 OnDrawColumnCell을 이용하면 편리합니다.

    몇가지만 응용하면 지정한 셀에 이미지를 그려 체크표시등도

    가능합니다.

    아래의 예제는 특정셀을 노란색바탕에 검은 글씨로 만듭니다.

    State를 검사하는 이유는 현재 선택된 셀은 그려선 안되기

    때문이지요.. 또한 Boolean값으로 저장되어 있는 컬럼들,

    예를 들자면 성별같은 것들을 '남','여'로 표시할때도

    이 Event를 사용하지요.



    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;

    const Rect: TRect; DataCol: Integer; Column: TColumn;

    State: TGridDrawState);

    begin

    with TDBGrid(Sender).Canvas do begin

    if (Column.FieldName = 'FILEDNAME') and (State = []) then begin

    Brush.Color := clYellow;

    Font.Color := clBlack;

    end

    else begin

    Brush.Color := clWindow;

    Font.Color := clWindowText;

    end;

    if (gdFocused in State) or (gdSelected in State) then begin

    Brush.Color := clHighlight;

    Font.Color := clHighlightText;

    end;

    FillRect(Rect);

    TextOut(Rect.Left+2,Rect.Top+2,Column.Field.AsString);

    Brush.Style := bsSolid;

    Brush.Color := clWindow;

    end;

    end;