|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"StringGridで作るDBGridもどき(表示専用)"
//StringGridで作るDBGridもどき(表示専用)
説明
StringGrid をDBGridのように使用するサンプルです。
DataSourceにデータソースを指定し、MeisaiDispをコール
することでデータが表示されます。
セルの色や書式等は別に沢山サンプルがあるので省略します。
現状の問題は、データを一度にすべて読んでしまうこと。^^;
^^^^^^^^^^^^^^^^^^^^^^^^
あんまり時間がかかるので、初期表示だけ入れてみました。
(ただの悪あがきですね。)
テストはC/S版で行ったのですが、Pro版でもいけると思います。
***プログラム部***
unit StrDBGrid1;
interface
uses
Windows, SysUtils, Classes, Controls,
Grids,DB;
type
TStrDBGrid = class(TStringGrid)
private
{ Private 宣言 }
constructor Create(AOwner: TComponent); Override;
function DsGet: TDataSource;
procedure DsSet(Ds: TDataSource);
protected
{ Protected 宣言 }
public
{ Public 宣言 }
procedure MeisaiDisp;
published
{ Published 宣言 }
Property DataSource :TDataSource read DsGet write DsSet;
end;
var
DataSource1 : TDataSource; //グリッド・データソース
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TStrDBGrid]);
end;
//--------------------------------------------------------------------
// constructor: 表領域作成処理
// input : AOwner
// output : None
// Return : None
//--------------------------------------------------------------------
constructor TStrDBGrid.Create(AOwner: TComponent);
begin
//元のCreate処理を実行する
inherited Create(AOwner);
end;
//--------------------------------------------------------------------
// function : データソース読取り処理
// input : None
// output : None
// Return : TDataSource データソース名
//--------------------------------------------------------------------
function TStrDBGrid.DsGet : TDataSource;
begin
Result := DataSource1;
end;
//--------------------------------------------------------------------
// procedure : データソース設定処理
// input : TDataSource データソース名
// output : None
// Return : None
//--------------------------------------------------------------------
procedure TStrDBGrid.DsSet(Ds: TDataSource);
begin
if Ds = DataSource1 then
begin
exit;
end;
DataSource1 := Ds;
//データソースの状態チェック(かなり甘いかも)
if Ds = nil then
begin
exit;
end;
if Ds.State = dsInactive then
begin
exit;
end;
//グリッド内容表示
MeisaiDisp;
end;
//--------------------------------------------------------------------
// procedure : グリッド内容表示処理
// input : None
// output : None
// Return : None
//--------------------------------------------------------------------
procedure TStrDBGrid.MeisaiDisp;
var
x,y : integer;
Meisai_FieldCount : integer; //データの項目数
Meisai_RecCount : integer; //データの件数
begin
//データソースの状態チェック
if DataSource1 = nil then
begin
exit;
end;
if DataSource1.State = dsInactive then
begin
exit;
end;
if DataSource1.DataSet.Active then
begin
//結果セットの項目数を取得
Meisai_FieldCount := DataSource1.DataSet.FieldCount;
//結果セットのレコード数
Meisai_RecCount := DataSource1.DataSet.RecordCount;
//明細グリッドの項目数を結果セットと同じにする
ColCount := Meisai_FieldCount;
//明細グリッドの行数を結果セットと同じにする
RowCount := Meisai_RecCount + 1;
//項目名表示
for x := 0 to Meisai_FieldCount - 1 do
begin
Cells[x,0] := DataSource1.DataSet.Fields[x].FieldName;
end;
//結果セット・カーソルを先頭に移動
DataSource1.DataSet.First;
//データ表示
for y := 1 to Meisai_RecCount + 1 do
begin
for x := 0 to Meisai_FieldCount - 1 do
begin
if DataSource1.DataSet.Fields[x].isNull then
begin
Cells[x,y] := ''; //Nullを空白として表示
end
else
begin
Cells[x,y] := DataSource1.DataSet.Fields[x].Value;
end;
end;
//次レコードを読み込み
DataSource1.DataSet.Next;
//初期表示の加速例?
{
if y = 20 then //一度に画面にでる行数を指定する
begin
Repaint;
end;
}
end;
end;
end;
end.
Original document by k.ogawa 氏 ID:(CQX02565)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|