DataGridViewでセルに入力されたコードからDBから名称を抽出し表示する方法

このQ&Aのポイント
  • DataGridViewでセルに入力されたコードを元にDBから名称を抽出し、名称欄に表示するプログラムを作成しています。
  • 現在は、別のセルから戻った後、フォーカスが移動されると表示されますが、フォーカスが離れた際に自動的に表示されるようにする方法が分かりません。
  • セルからフォーカスが無くなった際に名称を表示させる方法について、アドバイスをいただけないでしょうか。
回答を見る
  • ベストアンサー

DataGridViewで…

初めまして、VB2005初心者のココと申します。 今、VB2005を使い開発しているのですが、詰まってしまいました。 初心者の為、くだらない内容かも知れませんが、ご教授よろしくお願いいたします。 セルに入力されたコードを元にDBから名称を抽出し、名称欄(セル)に表示するプログラムを作っています。 コードを入力し、セルからフォーカスが無くなった際に自動的に名称を表示させたいのですが、うまく表示されず、 現在は、別のセルから戻った後、フォーカスが移動されると表示されるような感じになってしまっています。 フォーカスが離れた際に、表示させればいいと思うのですが、どのようにすればいいのかよく分からず困っております。 今は、CellLeaveを使用しています。 Private Sub DataGridView1_CellLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ Handles DataGridView1.CellLeave 後、名称取得の際はこんな感じにしています。 名称取得(Val(DataGridView1(1, DataGridView1.CurrentCell.RowIndex).Value)) ※1がコードを入力する列になります。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

DataGridViewでキーを入力(Cells(0)のエリア)させ、 Cells(1) のエリアに、名称を表示をさせるための DataGridViewのデザインをどのようにやっているのか わかりませんが、もし編集・追加許可モードで、実装している のであれば、下記でできます。 (DataGridViewのデザインをどのように定義されているのか記載されていなかったので、イメージと違うかもしれません。その場合は、別のサンプルを提示しますので、ご指摘ください) Private Sub DataGridView1_CellLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave   Dim keyValue As Integer = Convert.ToInt32(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).EditedFormattedValue)   If keyValue.Equals(0) Then     Exit Sub   End If   Dim name As String   name = 名称取得(keyValue)   DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex + 1).Value = name End Sub # ただしこのやり方だと、他の行をClickした場合への   実装がまったく出来ていないので、その辺りは工夫する   必要があります。 ご参考になれば幸いです。

taki_kk
質問者

お礼

kero_mio様 ご回答ありがとうございます。 ご連絡が遅れましたが動くようになりました。 イベントは「CellLeave」ではなく、「CellEndEdit」を使用いたしました。 ちなみに、以下の方法で動かしています。 Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit DataGridView1(3, DataGridView1.CurrentCell.RowIndex).Value = 名称取得(Val(DataGridView1(1, DataGridView1.CurrentCell.RowIndex).Value)) 1列目に入力されたキーを元に、名称取得関数で取得した名前を3列目のセルに表示させるようにしました。 kero_mioさんに教えていただいたサンプルも参考にさせていただきます。 ※デザインに関してですが。 >DataGridViewのデザインをどのようにやっているのか >わかりませんが、もし編集・追加許可モードで、実装している >のであれば、下記でできます。 編集・追加許可モードとはどういうことなのでしょうか? DataGridViewのプロパティ「EditMode」の事でしょうか?

関連するQ&A

  • DataGridViewで1行全てを選択状態にするには

    VB.NETのDataGridViewについての質問です。 DataGridViewでセルを選択した時に、そのセルの行を全て選択したいのですが、その方法がわからず困っています。 単純な方法を試してみたのですが Private Sub DataGridView_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView.CellClick DataGridView.CurrentCell = DataGridView.Rows(e.RowIndex).Cells(-1) End Sub この方法ですと、Cells(-1)の所で境界外となって上手くいかないようです。 何か良い方法がありましたら、ご教授願います

  • DataGridViewの特定のセルで選択状態を保ちたい VB2005

    DataGridViewの件で質問したいのですが。 よろしくお願いします。 VB2005で、DataGridViewの特定のセルでカーソルがとどまる(選択状態)ようにしたいのですが 思ったように動いてくれません。例えば、下のようなDataGtridViewがあったとして, 例 ------------------ |ID | X | Y | ------------------ |001| 100 | | ------------------ |002| 150 | | ------------------ |003| 105 | | ------------------ ID が002の行で、Y列のセルにカーソルが入りXと違う数を入力したら、メッセージを 表示させて、そのセルにカーソルがとどまる処理を作りたいのですが。下の行のセルに 移動してしまいます。  DataGridView_CellEndEditイベントやDataGridView1_CellValueChangedなどで カーソルがとどまる処理をしているつもりなのです下の行に移動してしまいます。 DataGridViewの初期設定の問題でしょうか? Private Sub DataGridView1_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged Dim DgvRow As Integer '行をセット DgvRow = e.RowIndex ' X と Yが異なれば、メッセージ表示 If DataGridView1("X", e.RowIndex).Value <> DataGridView1("Y", e.RowIndex).Value Then MsgBox("X <> Y", MsgBoxStyle.OkOnly) Me.DataGridView1.CurrentCell = Me.DataGridView1("Y", DgvRow) ' これも駄目だった ↓ 'Me.DataGridView1.CurrentCell = Me.DataGridView1("Y", e.RowIndex - 1) End If End Sub アドバイスいただけたら幸いです。よろしくお願い致します。 開発環境 VB2005 Visual Studio 2005 Standard Edition(SP1) Windows XP Pro SP2

  • VB.net 2010 DataGrigView

    VBでDataGridViewを使用して表の入力処理をして居ます。 入力内容が数字で無い時はエラー表示をして、セルのフォーカスをエラーセルに戻そうとして居ます。 実際にプログラムを組んだのですが、エラー時にセルのフォーカスが元に戻らす、エラーで無い時と同じ様に次の行に行ってしまいます。 エラー時にRow、Columnのアドレスを保存して置き、ボタンでそのRow、Columnの場所にセルのフォーカスを当てると、その位置のセルにフォーカスが当たります。 コーディング上は全く同じですが、同一処理内ではフォーカスの設定は出来ないものでしょうか。 試しに間にApplication.DoEvents()を入れてみましたが結果は同じでした。 どなたかこの現象を解決出来る方法が分かる方、若しくはDataGridViewではこの様な事は出来ない理由をご存知の方、お教え下さる様お願い致します。 ‘CellEndEdit割り込み処理 Private Sub dgvTst_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvTst.CellEndEdit Dim iVal As Integer Dim sWrk As String sWrk = dgvTst.CurrentCell.Value ‘セルの値をワークに If subChkDec(sWrk) = False Then '数字か調べる。 MsgBox("Error") ‘数字で無い時、エラー表示 iRow = dgvTst.CurrentCell.RowIndex ‘Rowアドレス取得 iCol = dgvTst.CurrentCell.ColumnIndex ‘Columnアドレス取得 lblRow.Text = iRow.ToString("D") ‘デバックの為にRow表示 lblCol.Text = iCol.ToString("D") ‘デバックの為にColumn表示 Application.DoEvents() dgvTst.CurrentCell = dgvTst.Rows(iRow).Cells(iCol) ‘RowとColumnを指定してセル位置変更したつもり、フォーカスは入力したセルの下に移動する。 End If End Sub ‘ボタンでの割り込み処理。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click dgvTst.CurrentCell = dgvTst.Rows(iRow).Cells(iCol) ‘同じ処理をボタンの割り込みで行うと指定した(エラーとなった)所にフォーカスが移る。 End Sub

  • cellをenterで横移動

    DataGridViewのcellをEnterキーで横移動しています。Enterキーのみ続けて押している場合は、横へ動くのですが、CurrentCellの値を変更しEnterキーを押した場合、新規行のcellに値を入力しEnterキーを押した場合、横ではなく真下のcellへ移動してしまいます。 原因がわかりません。 Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown Try If (e.KeyCode = Keys.Enter) Then If (DataGridView1.CurrentCell.ColumnIndex <> DataGridView1.ColumnCount - 1) Then DataGridView1.CurrentCell = DataGridView1(DataGridView1.CurrentCell.ColumnIndex + 1, DataGridView1.CurrentCell.RowIndex) e.Handled = True ElseIf (DataGridView1.CurrentCell.RowIndex <> DataGridView1.RowCount - 1) Then DataGridView1.CurrentCell = DataGridView1(1, DataGridView1.CurrentCell.RowIndex) Else DataGridView1.CurrentCell = DataGridView1(1, 0) e.Handled = True End If End If Catch ex As Exception MessageBox.Show(ex.Message) End Try

  • VB2008 DataGridView セル移動キャンセル

    VB2008 DataGridView セル移動キャンセル いつもお世話になってます。 Windows7 VB2008で現在開発しております。 画面にDataGridVIewと2つのボタン(更新、終了)がはっつけてあります。 列にはID、パスワード、名前、生年月日、性別があるとします。 やりたい事は IDを入力しセルからフォーカスが離れるとDBを参照し 登録されているIDの場合では他の項目を出力させますが 登録されていないIDの場合には「未登録」とメッセージ表示させ、 フォーカスは入力したセルのまま、というように動作させたいんです。 フォーカス移動をキャンセルしたいのでCellValidatingイベントで記述してますが 終了ボタンを押そうとフォーカスがセルから離れた瞬間メッセージ出力で ボタンから画面が閉じれなくなりました。 CellValidatingに記述してるのは以下みたいな感じです。 Private Sub DataGridView_CellValidating(Byval sender As ~, Byval e As ~) … ・・・ If Not ID登録チェック関数 Then MsgBox("未登録") e.Cancel = True End If ・・・ End Sub これってどう回避しますか? それか、使ってるイベントがよろしくないんでしょうか?

  • DataGridViewで入力チェック後、フォーカスをあてたい

    お世話になります。 現在VB2005で開発中なのですが、DataGridViewの処理で躓いております。 DataGridViewには「氏名」「住所」「生年月日」を入力できるようにしており、全ての項目において入力必須としています。 よって、どれか一つでも入力がなかった場合はエラーメッセージを表示させ、メッセージ表示後に該当項目のセルにフォーカスをあてたいと考え、ロジックを組んでおります。 仮に「氏名」が空白で、次の行の任意セルをクリックした場合、RowValidatedイベントで各セルに対し入力チェックを行い、メッセージを表示させた後にCurrentCellを空白だったCellにし、さらにEditModeで編集可能状態にすればいいと考えていたのですが、結果は最後にクリックした任意セルにフォーカスが移ってしまいます。 入力チェックを発生させるイベントに問題があるのか、カレントセルにフォーカスを当てる処理で問題があるのかで悩んでいる状態です。 どなたか心当たりがあれば教授願いたいです。 よろしくお願いいたします。

  • DataGridViewから値取得

    DataGridViewにボタンと項目2つが配置されています。 DataGridView1 DataGridView1.Columns("btn").HeaderText = "ボタン" DataGridView1.Columns("item1").HeaderText = "アイテム1" DataGridView1.Columns("item2").HeaderText = "アイテム2" ボタンを押すと、押した行のレコードを取得したいです。 ボタンのところを押下すると、 イベントハンドラで何行目か分かるサンプルをネットで見つけました。 惜しいですが、やりたいのと少し違いました。 'CellContentClickイベントハンドラ Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick Dim dgv As DataGridView = CType(sender, DataGridView) Dim test_item1 As String Dim test_item2 As String ' "btn"列ならば、ボタンがクリックされた If dgv.Columns(e.ColumnIndex).Name = "btn" Then MessageBox.Show((e.RowIndex.ToString() + "行のボタンがクリックされました。")) End If ' ここに押された行のitem1の値をセット ' test_item1 = (A) ' ここに押された行のitem2の値をセット ' test_item2 = (B) End Sub (A)、(B)に何を記述すれば値を取得できますか?

  • VB2005 DataGridView CurrentCell.ColumnIndex

    VB2005です DataGridViewで + ヘッダ + 項目名1 + 項目名2 + 項目名3 + 項目名4 + 列の順序変更で + ヘッダ + 項目名3 + 項目名2 + 項目名4 + 項目名1 + とした場合 i = DataGridView1.CurrentCell.ColumnIndex Label1.Text = DataGridView1.Columns(i).HeaderText としてヘッダ項目名を取得できましたが、 For x=0 to DataGridView1.ColumnCount - 1 として、セルの左から順番に項目名を取得するにはいかがしたらよろしいでしょうか? コードでCurrentCellを移動する方法も合わせて教えて下さい。 また上記2行のコードをもっとスマートに書けないでしょうか?

  • DataGridViewのセルをenterキーで横移動したいです。

    VB.NET2005にてDataGridviewのセルを横移動させたいんです。 いろんな物を参考に以下のプログラムを何とかプログラムを組んでみましたが、ビルド時セル(0,0)→セル(0,1)→セル(0,2)→セル(0,3)・・・と1行目がenterキーで移動できず、2行目へ下がってしまいます。2行目からは横移動できるようになりました。 1週間近く試行錯誤しましたが、うまく動きません。 訂正箇所を教えていただけないでしょうか? よろしくお願いします。 いまの行と列の取得 Dim currentRow As Integer = Me.DataGridView1.CurrentRow.Index Dim currentColumn As Integer = Me.DataGridView1.CurrentCell.ColumnIndex Dim nextColumn As Integer = currentColumn + 1 Dim nextRow As Integer = currentRow '押したキーがENTERだったら Dim t As Object t = e.KeyCode() If t = 13 Then If nextColumn = 6 Then '列数が最終列を超えたとき nextColumn = 0 '最初の列数へ Else nextRow -= 1 End If MessageBox.Show("nextColumn =" & nextColumn & "nextRow = " & nextRow) Try Me.DataGridView1.CurrentCell = Me.DataGridView1(nextColumn, nextRow) Catch If Not (Me.DataGridView1.CurrentCell Is Nothing) Then nextColumn = 0 nextRow = 0 Me.DataGridView1.CurrentCell = Me.DataGridView1(nextColumn, nextRow) Exit Sub Else Me.DataGridView1.CurrentCell = Me.DataGridView1(nextColumn, nextRow) Exit Sub End If End Try End If

  • VB2005 DataGridView で選択状態(青色反転)

    DataGridViewの件で質問したいのですが。 よろしくお願いします。 VB2005で、DataGridViewの特定のセルが選択されて値が青色反転した Selectイベントのような状態にしたいのですが。 例えば、下のようなDataGtridViewがあったとして, 例 ------------------ |ID | X | Y | ------------------ |001| 100 | | ------------------ |002| 150 | | ------------------ |003| 105 | | ------------------ ID が002の行で、Y列のセルにカーソルが入りXと違う数を入力したら、メッセージを 表示させて、そのセルを青色反転させる処理を作りたいのですが。下の行のセルに 移動してしまいます。 そこで下記のようなコードを書きました。 Private Sub DataTable1DataGridView_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataTable1DataGridView.CellValidating If e.ColumnIndex <> Me.DataTable1DataGridView.Columns("Y").Index Then Exit Sub If Me.DataTable1DataGridView("X", e.RowIndex).Value IsNot Nothing AndAlso _ Me.DataTable1DataGridView.EditingControl IsNot Nothing Then If Not Me.DataTable1DataGridView("X", e.RowIndex).Value.ToString.Equals(Me.DataTable1DataGridView.EditingControl.Text) Then MsgBox("X <> Y", MsgBoxStyle.OkOnly) Me.DataTable1DataGridView.BeginEdit(True) 'e.Cancel = True End If End If End Sub e.cancel = True だとセルにはとどまりますが。セルが選択状態にはなりません。 BeginEdit(True)を使うと下のセルが選択状態になります。 アドバイスいただけたら幸いです。よろしくお願い致します。 開発環境 VB2005 Visual Studio 2005 Standard Edition(SP1) Windows XP Pro SP2

専門家に質問してみよう