【DO!BOOK・ページリンク】
2008_migaro_techreport_001   112 / 136

BOOKをみる

10秒後にBOOKのページに移動します


110 2.DBGridの チェックボックス実装 DBGrid で、行ごとにチェックを 付けさせることは可能ですか? DBGrid の標準機能では、チェッ クボックスを扱っていない。その ため、DrawColumnCell イベントなどに 自身で描画処理を行う必要がある。  図は、チェックボックスを扱うフィール ドが数値項目である場合の、チェックボッ クス描画の処理手順である。【図3】  同じ仕組みで、チェックボックスを文字 列フィールドで扱う場合は、ブランク と’1’などで代用することができる。  また、この仕組みを実現するための DBGrid のクリックイベントと描画イベン トのソース例を示す。【ソース1】【ソース2】  このソースでは、イベントの動作上、 DBGrid のOptions>dgEditing がFalse であることを前提としている。 Q. A. ソース1 DBGrid上でのチェックボックスデータの操作例 //OnCellClick イベント procedure TForm1.DBGrid1CellClick(Column: TColumn); var SaveOptions:TDBGridOptions; AFieldName: String; begin with DBGrid1 do begin if(Assigned(Column.Field)) then begin SaveOptions := Options; try if (not Column.ReadOnly) and (Column.Field.Tag = 9) and (DataSource.DataSet.Active) then begin Options := Options - [dgEditing]; AFieldName := Column.FieldName; if (DataSource.DataSet.State = dsBrowse) then DataSource.DataSet.Edit; if (Column.Field.DataType = ftInteger) then begin if DataSource.DataSet.FieldByName(AFieldName).AsInteger = 1 then DataSource.DataSet.FieldByName(AFieldName).AsInteger := 0 else DataSource.DataSet.FieldByName(AFieldName).AsInteger := 1; end; DataSource.DataSet.Post; end else Options := SaveOptions; except Options := SaveOptions; raise; end; end; end; inherited; end; 図3 実装イメージ