2009-03-23 10 views
7

TDBGridで現在の行が見つかっていますか?DelphiのTDBGridで現在の行を検索

+1

私はあなたの質問に明確化のビットを提供する必要があると思う、クエリの行またはDBGridの行を意味するのですか? –

答えて

5

私はあなたの質問を理解しているかどうかはわかりませんが、私は答えを試みるでしょうし、あなたが求めているものではないかどうかを明確にすることができます。

TDBGridはDataSourceに関連付けられているため、現在の行はデータソースの現在の行と同じです。プライマリキー値またはRecNoプロパティを調べて、現在のレコードがどのレコードかを判断することによって、DataSourceを照会することができます。

0

レコード数と現在のレコードを提供するためにデータソースに依存したくない場合(たとえば、リモートサーバー上で単方向カーソルを使用しているため)、基礎となるグリッドコントロールを使用できます。

同様のStackOverflow質問へのthis answerを参照してください。

+0

あなたは正しいことを言っ始めましたが、あなたが示したリンクはレコード数の取得方法を示していますが、最も重要なもの(RecNoまたはRowまたはCurrentRowなど)はグリッドから直接取得できません。申し訳ありません –

+0

@Carlos: 'RowCount:= TDummyGrid(MyDBGrid).RowCount'の代わりに' Row:= TDummyGrid(MyDBGrid).Row'を書くのを止めていますか?ちょっとした思考が必要ですね... – mghie

+0

まあ...グリッドに色を変えたいのですが、ROWプロパティはカーソルの変更の間に "永続的"ではありません。つまり、カーソルを移動すると選択を変更すると、同時に表示可能なすべての行のROWプロパティが変更されます。それぞれの行を個別に、現在選択されている行とは独立して識別する方法が必要です。今はリンクされたデータセットのRecNoを使用していますが、一方向のデータセットではこのプロパティは役に立ちません。あなたが見ることができるように、思考のちょっとしたビットが必要ですが、あなたは怠け者でした。申し訳ありません... –

4

あなたはこのようにそれを行うことができます。

1 - (これはあなたがプライベートメソッドにアクセスできるようになります)のTDBGridのコピーであるローカルクラスを定義します。

type 
    THackDBGrid = class(TDBGrid); 

2 - そして、あなたはキャストすることができますあなたのローカルに定義されたクラスに、とのようにプライベートメソッドから引っ張っ:

function TfrmMain.GetFieldValue(colnum : integer): string; 
begin 
    Result := THackDBGrid(grdMain).GetFieldValue(colnum); 
end; 

または、行番号を取得するには:

function CurrentRowNumber: integer; 
    Result := THackDBGrid(grdMain).Row; 
end; 

このテクニックは他の状況でも役に立ちますが、クレジットを請求することはできません。 I got it from here

関連する問題