2016-09-01 11 views
1

데이터 소스에 대해 OnDataChange 이벤트에서 오류가 발생하면 행 앞에 이미지 경고를 추가해야합니다.Delphi가 DBGrid 행 앞에 이미지 추가

enter image description here

우리가 어떻게 할 수 있습니까?

+0

아니요, 'DrawDataCell'은 Johan의 응답으로 완료되지 않은 것 같습니다! – userPro

답변

2

나는 다음과 같은 시작 지점했습니다 : http://delphiexamples.com/databases/gridimages.html

여기 수정에 대한 나의 제안이다를.
tag 속성을 사용하여 datachange에 오류 코드가있는 필드를 표시하십시오.
표시 시간이 표시되면 필드 태그를 확인하고 필요한 경우 비트 맵을 표시하십시오.
비트 맵을 ImageList에 저장하는 것이 좋습니다. DB에서 비트 맵을 얻지 마십시오. 이유없이 데이터베이스를 망치게됩니다. 당신이 오류가 여러 행을 가질 수있는 경우

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); 
begin 
    if SomeCondition then Field.Tag:= Field.DataSet.RecNo 
    else Field.Tag:= 0; 
end; 

는, 당신은 오류가있는 행의 외부 목록을 사용해야합니다. TList<integer>은 그 목적으로 잘 작동합니다.
그리기 방법에서 현재 행이 오류 목록에 있는지 확인하십시오.

Delphi의 기본 DBGrid는 열과 행 헤더를 쉽게 그리지 않습니다.
그러나 또한 금지하지 않으므로 라인 바깥으로 색칠하게됩니다.

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; 
    Field: TField; State: TGridDrawState); 
var 
    index: integer; 
begin 
    //Only draw one error per field. 
    //you might also want draw the error indicator in the field itself. 
    //and not in the row header. 
    if (Field.Tag = Field.Dataset.RecNo) and (Field = Table1Field1) then begin 
    //never mind the Rect we can draw where we like. 
    index:= 1; 
    ImageList1.Draw(DBGrdi1.Canvas, 2, Rect.Top, index, dsTransparent); 
    end 
    else DBGrid1.DefaultDrawDataCell(Rect, Field, State); 
end; 
+1

그거 도와주세요 .. 고마워요! – userPro

+0

아 멋지 네요. – Johan

+0

당신은 내 upadte 대답을 볼 수 .. – userPro