none
Datagridview のコンボボックスの表示を入力したデータでコントロールしたい。 RRS feed

  • 質問


  • datatable で指定した項目が 2個あります。

    ①1個目 テキストボックス

    ②2個目 コンボボックス

    _________________________________

    ①を入力すると①のデータに合致する値で②の表示値を変更する。

    ②をプルダウンで選択したら 選択結果のコード値を①へ設定する。

    たとえば 郵便番号を①、住所を②として考えてみます。

    ①で 郵便番号7ケタ を入力すると ②のコンボボックスの表示がかわり

    ①の郵便番号に合致した住所が表示されるようにしたいのです。

    _____________________________

    いろいろ調べてみましたが Datagridview のコンボボックスのプロパティには

    selectIndex がないので 外部から操作できないように思えます。

    ____________________________________________________________________

    Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
            Select Case e.ColumnIndex
                Case 0

    Dim cmb As New DataGridViewComboBoxCell
    Dim Pos As Integer = Me.郵便番号DataSetBindingSource.Find("郵便番号", DataGridView1(0, e.RowIndex).Value)
                    If Pos > 0 Then
                        Me.郵便番号DataSetBindingSource.Position = Pos

                    End If

                    With cmb
                        .DataSource = Dgcmb郵便番号.DataSource
                        .ValueMember = "郵便番号"
                        .DisplayMember = "住所"

                    End With

    end select

    ____________________________________________

    なにか具体策ありましたらご教授ねがいます。

    以上

    2013年8月5日 13:17

回答

すべての返信

  • EditingControlShowingイベントで、当該のComboBoxを取得できますので、それに対して操作すればできるのではないかと思います(未検証です)。
    DataGridViewを編集する時には、編集用のコントロールが現れます。例えば、ComboBoxを編集しようとすると、DataGridViewのそのセルの位置に、Comboboxが現れ、それにデータを入力する仕組みです。このように編集用コントロールが現れるタイミングで発生するイベントが、EditingControlShowingイベントであり、ここで編集用に現れたコントロールを捕まえることができます。なお、この編集用コントロールはDataGridViewに1つしかありません。例えば、EditingControlShowingイベントで捕まえられるComboBoxは、どのセルをクリックしても同じもの(同じインスタンス)であることに注意して下さい。

    (参考)
    DataGridViewでセルの編集に使われているコンボボックスのSelectedIndexChangedイベントを捕捉する
    http://dobon.net/vb/dotnet/datagridview/selectedindexchanged.html

    DataGridViewのComboBoxのデータ表示の高速化
    http://social.msdn.microsoft.com/Forums/ja-JP/c9e6b1f4-bdef-4766-97c1-ef2ecfb1caa1/datagridviewcombobox


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年8月5日 14:26
    モデレータ
  • SelectIndex プロパティはありませんが、Value プロパティ(ValueMemberに紐付く値)で制御出来ます。
    • 回答としてマーク 星 睦美 2013年8月6日 4:08
    2013年8月6日 0:11
  • aviator__さまへ

    目から鱗状態です。

    こんなに簡単な事でしたか 

     Dim cmb As NEW DataGridViewComboBoxCell

     cmb = datagriview1(2,1)        'コンボボックスのセル ②(住所)

     cmb.Value= datagriview1(1,1).value 'テキストボックスのセル①(郵便番号)

    で成功しました。

      大変助かりました。

    ありがとうございました。




    • 編集済み MYNOBU 2013年8月6日 2:37
    2013年8月6日 2:14
  • trapemiyaさまへ

    回答ありがとうございます。

    紹介していただいた URLを参考にして検討してみましたがうまくゆきませんでした。

    いろいろな情報提供 ありがとうございました。
    • 編集済み MYNOBU 2013年8月6日 2:19
    2013年8月6日 2:15