掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DBGridに複数改行した文字列を表示するには? (ID:38761)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
『DBGridの見出しを2行に…』の過去ログを参考にあるカラムデータを改行表示しようと試みましたが、DrawCellで現在のARawに対応するDB値が取得できていません。DBの内容は以下の通りです。 日付 項目A 2010/07/01 データ1 2010/07/02 データ2;データ3 項目Aの内容に「;」があれば、改行する仕様です。 想定するグリッド表示 日付 項目A 2010/07/01 データ1 2010/07/02 データ2 データ3 実行結果(最初の表示)※画面表示直後は全行先頭レコードの値表示 日付 項目A 2010/07/01 データ1 2010/07/02 データ1 実行結果(グリッドの2行目をクリック)※マウスで行移動すると全行選択された行のDB値表示→表示は思い通りになっている 日付 項目A 2010/07/01 データ2 データ3 2010/07/02 データ2 データ3 TDBGridを継承して作成したクラスのDrawCellメソッドは以下の通りです。 データの取得方法を変えてみましたが結果は同じでした。 TDBGridを普通に貼り付ければ問題なくリンクされたデータが表示されるので、この関数内でのDB値取得方法が間違っていると思いますが、何方かご存知の方、ご教授ください。 procedure TMultiLineDBGrid.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); begin inherited; vCnt := 0; if (ARow > 0) and (ACol > 0) then if Columns[ACol-1].Field.FieldName = FFieldName then begin InflateRect(ARect, -1, -1); Canvas.FillRect(ARect); //文字列の;文字を改行コードに変える vText := Columns[ACol-1].Field.DisplayText; //vText := GetEditText(ACol, ARow); while vText <> EmptyStr do begin if Pos(';', vText) > 0 then begin if vCnt = 0 then vOutText := Copy(vText, 1, Pos(';', vText) - 1) else vOutText := vOutText + #13#10 + Copy(vText, 1, Pos(';', vText) - 1); Delete(vText, 1, Pos(';', vText)); end else begin if vCnt = 0 then vOutText := vText else vOutText := vOutText + #13#10 + vText; vText := EmptyStr; end; Inc(vCnt); end; //カラム表示条件設定 if vCnt > 1 then vFlag := DT_VCENTER or AlignFlags[Fields[ACol-1].Alignment] else vFlag := DT_SINGLELINE or AlignFlags[Fields[ACol-1].Alignment]; //テキスト描画 DrawText(Canvas.Handle, PChar(vOutText), Length(vOutText), ARect, vFlag); //カラムの高さ変更 RowHeights[ARow] := vCnt * 18; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.