データグリッドのセルにワンクリックで定数を挿入するには?


たかし  2003-11-25 11:32:04  No: 110175

VB6&ACCESSでDataGridにマスタを表示しているのですが、その参照したマスタの右の列に規定値であらかじめYESという文字列を表示して、ワンクリックするとNOという文字列を表示して、またワンクリックするとYesと繰り返して選択させるようなものをつくりたいのですが、うまくできません。
If DataGrid1.Text = "Yes" Then
    DataGrid1.Text = "No"
ElseIf DataGrid1.Text = "No" Then
    DataGrid1.Text = "Yes"
   End If
End If
こんな感じでできると思ったのですが、うまくいきません。ちなみにセルの位置の特定はDataGrid1.colやrowを使用して変数に格納してそれを上のコードに混ぜてやったのですが、うまくできません。どううまくいかないかというと、確かにデータは変更されるのですが、表示の方に問題があって、セルを移動したり、ダブルクリックするまで反応しないのです。
更新クエリーを使っても試しましたが、結果は同じです。データは変更されるのですが、他のセルに移動するまで反映されません。それではユーザは全く逆の値をいれて、セル移動後に間違いに気づくようになってしまうので困っています。どなたか、良い方法があったら教えてください。お願いします。


特攻隊長まるるう  2003-11-27 09:32:57  No: 110176

ボクばっかりでゴメンナサイ。プログラム歴2年だからね…
そんなに答えられないんだけど…しょうがないから Access 
出してきたよ…使わないのにw
Data Environment デザイナの設定?何じゃそりゃ???
とりあえずいじってみる…う〜ん。データの更新で蹴られるw
…メンドクサイ(  _)_
データの UPDATE できませんが、とりあえず表示更新だけ…(ぉ。
…こんな状態なのであまり信用しないように(爆

更新クエリでデータはちゃんと更新できてるよね?。
できてないと知りません。ボクはできませんw。

そのあと選択状態のデータが残る…かな?。
DataGrid の仕様っぽいが…ぶっちゃけ Refresh できてない
やん?。どうにかしろよマイクロソフト(怒)…と怒っても
仕方ないので…。
選択状態を解除してやらないとイケナイっぽい…。
てことは…
    With Me.DataGrid1
        .SelStart = 0
        .SelLength = 0
    End With
あれ?全く変わらず…とりあえずステップ実行…。
なんかデータコントロールの設定変えた時点で色々走ってるなぁ。
SelStart と SelLength が設定前なのにすでにどっちも0???
選択してるのに???ありえへん。選択できてない?
… Focus 飛んでるのかな?
    With Me.DataGrid1
        .SetFocus
        .SelStart = 0
        .SelLength = 0
    End With
…ん?いけるっぽい?
その後に覚えてる Row と Col で選択し直してみてください。
これでダメなら裏技(力技?)使います。SetFocus の後で
    SendKeys ("{ESC}")
ってやってみて?
SendKeys はキーストロークをアクティブ ウィンドウに渡すコマンドです。
使う時は使うオブジェクトがアクティブかどうか意識しておきましょう。

ついでに調べてる途中で Bookmark について分かったので
ソース載せます。
Private Sub DataGrid1_DblClick()
    Dim i As Integer
    
    With Me.Adodc1
        Dim strQuery As String
        strQuery = "SELECT Top 5 * FROM Authors Union SELECT '1','2','3' FROM Authors"
        
        .RecordSource = strQuery
        .Refresh

        ' この辺で色々すると使えるようになる…が使い勝手悪いデス
        With .Recordset
           .MoveLast: .MoveFirst
            ReDim bms(.RecordCount + 1) As Variant
            
            Do Until .EOF
                bms(i) = .Bookmark
                i = i + 1
                .MoveNext
            Loop
    
        End With
    End With
    
    With Me.DataGrid1
        .SetFocus
        .SelStart = 0
        .SelLength = 0
        
'        .Row = 3
'        .Col = 1
        ' これで使えると思います
        .Bookmark = bms(3)
        ' ウチの DataGrid には SelStartRow SelEndRow が無いんですけど?
        ' ヘルプには載ってるのに…セル選択もよく分かりません(TT)。
        .SelStartCol = 1
        .SelEndCol = 1
'        .SelStartRow = 1
'        .SelEndRow = 1
        .SelStart = 1
'        .SelStart = 0
        .SelLength = 2
    End With
End Sub
文章読んでいるとそろそろ自分でほとんどのデバッグできそうな
感じなんでボクがどうやってアヤしい所を探ったかまで書いてみました。
参考にしていただけるとありがたいです。
…VB にアヤしい所ってたくさんあるからねぇ。


たかし  2003-11-27 19:04:49  No: 110177

いろいろ調べて頂き、有難うございました。自分でも色々試してみたんですが、ADOデータコントロールで接続するとちゃんとできるんですよね。私はコードでレコードセットを取得して接続する形でやってたんですが、その場合、うまくいきませんでした。でもADOデータコントロールって詳細設定の仕方があまりわからないのであまり使いたくないんですよね。まぁ、ただの勉強不足....。まだVB歴2週間程度なので許してください。ぶ厚い本を沢山買って、参考にしながら作ってるんですが、説明がわかりづからったり、その操作法すら載っていない場合もあるんですよね....。ですから、これからもどうぞよろしくお願いします。


特攻隊長まるるう  2003-11-29 10:04:09  No: 110178

あれ?選択状態解除で解決しなかった??
>セルを移動したり、ダブルクリックするまで反応しないのです。
…ってこれで解決すると思ったんだけどなぁ。


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

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






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