VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2003/01/02(Thu) 13:08
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe^4: FLEXGRIDについて

あら? 私は「FLEXGRID」というのは、[MSHFlexGrid]か[MSFlexGrid]の事かと思っていたのですが、
ここでいうFLEXGRIDとは、米VideoSoft社のVS-FlexGridの事だったのですね。。。(^^;)
http://www.grapecity.com/japan/support/database/P1_88.htm

コントロールによって、それぞれが持つプロパティ・メソッド・イベントというのは
微妙に異なってきますから、コントロールの製品名は、正確に記載された方が良いですよ。


>    .TextMatrix(R, i) = IIf(IsNull(rs.Fields(i).Value) = True, Space(0),rs.Fields(i).Value)
この場合、「  .TextMatrix(R, i) = "" & rs.Fields(i).Value  」という書き方も可能です。

また、TextMatrixプロパティを繰り返し呼び出すかわりに、Clipプロパティに
Rs.GetStringを代入する事で、複数のセルの値を一括して設定させる事もできます。
(データの内容によっては、ループさせる必要が無くなる分、表示までの時間を短縮させられる場合があります)

> という感じで、ループをかけてテーブルの構成に合わせてグリッドに値を挿入しているのですが、
> そのグリッドを編集して、更新ボタンでそのグリッド上の値をそのままテーブルに反映させたいのです。
提示されたコードのように、Recordsetとグリッドを直接連動させていない場合には、
データを連動させるためのコードを、手動で書き加えてやる必要があります。

グリッドが編集された際に、Recordset側の該当行もUpdateさせるようにしてみてください。
そうすれば、最後にRs.UpdataBatchを発行させることで、データベースへ一括して反映させる事ができます。
なお、データの更新だけでなく、追加(AddNew)や削除(Delete)が行われたRecordsetであっても、
それらの編集結果は、正しくデータベースへ反映される事になります。

# 該当レコードへの移動は、Moveメソッドを用いる方法や、AbsolutePositionプロパティを
# 使う方法など、いくつかの手段があります。

ちなみに、グリッドへの編集をRecordsetに反映させるのとは逆に、Recordsetへの編集内容を
グリッド側に反映させたいのであれば、RecordsetオブジェクトのWillChangeField/FieldChangeComplete
イベントを利用する事ができると思います。


ただ、VsFlxGridの場合は、直接、Recordsetを連結させる機能があったはずですから、
そちらを利用された方が、コードとしてはスマートになるかもしれません。その場合、
セルの各値を編集すると、自動的にRecordset側も更新されますので、最後にUpdataBatchを
発行するだけで済むでしょう。

# もっとも、データの内容によっては、連結(データバインド)させない方が
# 扱いやすい場合もありますから、どちらの方法でコーディングした方が良いのかは、
# ケースバイケースですけれどね。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -