DBgridのTeditへの反映方法

解決


りな  2010-01-01 23:00:01  No: 36599

現在、delphi4のservice pack3のデータベースoracle 8iを使って、プログラムを組んでいるのですが、DBGridに表示されたデータの1つのcell(たとえば、ID)をクリックすることによって、選択されたその行の情報がそれぞれのTEditへ反映させる方法を、恐縮ですが、教えていただけないでしょうか?

流れとしては、まず検索画面で検索して、その内容をDBGridに表示、その中のIDセルをクリックすると、その内容がフォーム上のTEditのID,名前、住所等のスペースに反映。

edID := DBGrid1.SelectedRows.field[0];のように書くのではないかと考えているのですが、いまちにわかりません。

書き方の詳細に教えていただけると、幸いです。


初心者  2010-01-01 23:06:12  No: 36600

例えば、こんなこと?。

procedure TForm_TmSelect.DBGrid_Select;
var
   i : integer;
begin
   for i := 0 to DBGrid1.FieldCount - 1 do
      case i of
         0 : wk_code := DBGrid1.Fields[i].AsString;
         1 : wk_mei := DBGrid1.Fields[i].AsString;
         2 : wk_kana := DBGrid1.Fields[i].AsString;
      end;
end;


りな  2010-01-01 23:23:00  No: 36601

迅速な返答ありがとうございます。

書いていただいた内容に関して、何点かお伺いしたいのですが、

TForm_TmSelect.DBGrid_SelectはDBGridのプロパティの中にあるonclickと同じようなコマンドですか?

field[0]の場合は一番左の項目の値、field[1]の場合は左から2番目を指しているのでしょうか?

この作業に対して、for文を使わないといけないでしょうか?

お手数ですが、よろしくお願い致します。


HOta  2010-01-02 00:58:57  No: 36602

初心者の方のDBGrid1.Fields[i].AsString;は、DBGrid1のi番目の項目を表します。
ただ、TDBEditを使ってみたらどうでしょうか?


Null  2010-01-02 03:03:57  No: 36603

> TForm_TmSelect.DBGrid_SelectはDBGridのプロパティの中にあるonclickと同じようなコマンドですか?

onDbclick かな。
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
.......
end;

>field[0]の場合は一番左の項目の値、field[1]の場合は左から2番目を指しているのでしょうか?

HOta氏のレスの通りです。

>この作業に対して、for文を使わないといけないでしょうか?

いいえ、特に必要は有りません。
[i]を明示的に指定されても良いと思います。...あくまでも一例です。

HOta氏の、「ただ、TDBEditを使ってみたらどうでしょうか?」が
簡単ではないでしょうか?。


Null  2010-01-02 03:12:25  No: 36604

> onDbclick かな。

ご免なさい。
OnCellClickでもいけるかな。


りな  2010-01-02 03:57:08  No: 36605

最初は、私もTDBEditをしようと思ったのですが、これを使うと直接データベース上のテーブルを操作しているようなイメージがあるのですが、クエリの項目をTDBEditで取得し、TEditと同じようなwith query do ..selectといった構文でupdate等を行うことができるのでしょうか?

また、DBGridで表記された1つの行のIDをクリックしたときに、そのIDが持つ情報(ここでは名前とする)をTEditへ反映させるときは、以下のような書き方でよろしいでしょうか?

TForm_TmSelect.DBGrid_Select;(←これは、自分で作成するんですか?
それとも、onclickのイベントプロシージャーのときのように、そのような項目があって、ダブルクリックすると自動で作成されるのですか?oncellclickを選んだときとは、表記の仕方が違ったのでお伺いしました)

begin
         Mainform.edit_NAME := DBGrid1.Fields[1].AsString;

end;


Null  2010-01-02 04:29:56  No: 36606

> TForm_TmSelect.DBGrid_Select;(←これは、自分で作成するんですか?
多分これは、自前の関数だと思います。

例...
procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
   Edit1.Text  := DBGrid1.Fields[0].AsString;
   Edit2.Text  := DBGrid1.Fields[1].AsString;
   Edit3.Text  := DBGrid1.Fields[2].AsString;
end;

procedure TForm2.DBGrid1DblClick(Sender: TObject);
begin
   Edit1.Text  := DBGrid1.Fields[0].AsString;
   Edit2.Text  := DBGrid1.Fields[1].AsString;
   Edit3.Text  := DBGrid1.Fields[2].AsString;
end;

DbGridのセルは、列・行とも'0'から始まります。

OnDblClickには、それなりの深い意味が有るような!!。


りな  2010-01-02 20:13:49  No: 36607

Nullさん、詳しく教えていただき、どうもありがとうございました。


りな  2010-01-02 20:15:07  No: 36608

また、HOtaさん・初心者さん、ご協力していただき、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加