DatagridViewの値確定

このQ&Aのポイント
  • VB2005のDataGridViewで特定のセルの値を変更し、ButtonコントロールをクリックするとCellValueChangedイベントが発生するが、HScrollBarコントロールをクリックするとイベントが発生しない。変更した値が反映されず、前の値で処理が進む問題がある。HScrollBarコントロールをクリックしてもDataGridViewの値を確定する方法はあるか。
  • VB2005のDataGridViewで特定のセルの値を変更し、ButtonコントロールをクリックするとCellValueChangedイベントが発生するが、HScrollBarコントロールをクリックするとイベントが発生しない。変更した値が反映されず、前の値で処理が進む問題がある。HScrollBarコントロールをクリックしてもDataGridViewの値を確定する方法について教えてください。
  • VB2005のDataGridViewで特定のセルの値を変更し、ButtonコントロールをクリックするとCellValueChangedイベントが発生するが、HScrollBarコントロールをクリックするとイベントが発生しない。変更した値が反映されず、前の値で処理が進む問題がある。HScrollBarコントロールをクリックしたときもDataGridViewの値が確定される方法はありますか。
回答を見る
  • ベストアンサー

DatagridViewの値確定

VB2005です。 DataGridViewを私用しています。 EditModeはEditOnEnterです。 特定のセルの値を変更し、カーソルがその列から移動していない状態で、 Buttonコントロールをクリックすると、ボタンクリック時のイベントの前に、 そのセルのCellValueChangedイベントが発生します。 が、同じ要にセルの値を変更し、カーソルがその列から移動していない状態で、 HScrollBarコントロールをクリックすと、CellValueChangedイベントが発生しません。 そうすると、変更した値が反映されず、前の値で処理が進んでしまいます。 HScrollBarコントロールをクリックしたときも、DataGridViewの値が 確定される方法はないでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • unamana19
  • ベストアンサー率62% (56/89)
回答No.1

CurrentCellDirtyStateChangedイベント内で、CommitEditを呼ぶとか・・・ Private Sub DataGridView1_CurrentCellDirtyStateChanged(ByVal sender...   If Me.DataGridView1.IsCurrentCellDirty Then     Me.DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)   End If End Sub (注意!表示の関係上、半角スペースは全角スペースになっています)

rabu_chihaha
質問者

お礼

早速の回答ありがとうございました。 unamana19に教えていただいたようにしましたら 出来ました。 ありがとうございました

関連するQ&A

  • DataGridView入力確定前の値を取得

    VB.net (VS2005)のDataGridViewに関してですが、 セルの入力が確定される前の値を取得したいのですが いい方法はないでしょうか。 入力可能状態のセルに文字を張付けたとき、 RowStateChangedイベントが発生するのですが、 Enterキーを押下して入力を確定する前に、 張付けた文字列を取得したいです。

  •  DataGridViewとHScrollBarのバーの幅を合わせる

     DataGridViewとHScrollBarのバーの幅を合わせる  今晩は,質問させていただきます.どうぞよろしくお願いいたします.  HScrollBarでDataGridViewを連動させております。 DataGridView内のセル幅の変更に伴いバーの大きさが変更された際、 HScrollBarのバーの大きさもこれと同じにしたいのでございますが、 どのプロパティにどの数字を入れてやればよいのかが分からず、 1ヶ月ほど悩んでおりますorz  ためしに↓のようにコーディングいたしましたが、、、   Private Sub DGV1_ColumnWidthChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) _     Handles DGV1.ColumnWidthChanged     With HScrollBar1       .Minimum = 0       .Maximum = (DGV1.Columns(0).Width + DGV1.Columns(1).Width _            + DGV1.Columns(2).Width + DGV1.Columns(3).Width _            + DGV1.Columns(4).Width + DGV1.Columns(5).Width)             '↑例えばColumnが0~5まである場合でございます。             'おそらく「.Maximum」に何か入れるのでは、、と              '推測している次第でございますが。。。     End With   End Sub ↑この場合、HScrollBarの幅がDataGridViewより小さくなったり してしまい、その状態のままHScrollBarを動かしてしまいますと、 DataGridViewを連動させることができずエラーになってしまいます。  以下、必要ないかもしれませんが、HScrollBarとDataGridViewを 連動させているコードでございます。   Private Sub HScrollBar1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) _     Handles HScrollBar1.Scroll     DGV1.FirstDisplayedScrollingColumnIndex = e.NewValue       '↑ここでHScrollBarから大きい値が入ってしまい,       ' エラー「指定された引数は、有効な値の範囲にありません」になります。   End Sub  何かよい方法がございましたら,是非ともアドバイスいただきたくお願いいたします.  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします.

  • DataGridViewでMauseDown

    VB.NETでDataGridViewでMauseDownイベントを実装するとCellContentClickイベントやCellClickイベントが発生しなくなりました。 VB.NETのバージョンは4.6.2です。 Panelコントロール上に配置したDataGridViewのCellContentClickイベント内でClickされたセルの列に応じた処理を行っています。 このDataGridViewにDrag&Dropの機能を設けるべく、MouseDownイベントを追加しました。 MouseDownイベント内に記述した処理の動作も問題無く、全体の動作確認を行っていると、DataGridViewのCellContentClickイベントが発生していない事に気がつきました。 CellContentClickイベント内の処理の1行目にブレークポイントを設置して確認しました。 試しにMouseDownイベント自体をコメントアウトするとCellContentClickイベント内の処理は実行されました。 MouseDownイベント、CellContentClickイベントの両方を動作させる方法はありますでしょうか?

  • DataGridViewでセルクリックイベントを発生させるには

    DataGridViewでセルクリックイベントを発生させるには、 デザイナからではCellClickイベントハンドラとなりますが、 プログラムコード上から発生させるにはどのようにすればよろしいでしょうか? CurrentCellでアクティブセルを変更した時に、そこのセルをクリックさせるイベントが欲しいのですが・・ 宜しくお願い致します。

  • DataGridViewのフォーカス遷移について

    はじめまして C#のWindouwsアプリを開発しています。 件名に関してどなたかご教授お願いします。 事前の情報としまして、 DataGridViewのフォーカス遷移時にReadOnlyがtrueのセルには カーソル遷移をさせたくなく、下記のサイトを参考にDataGridView をカスタマイズしました。 http://social.msdn.microsoft.com/Forums/ja-JP/vbexpressja/thread/fc1a0d8d-23d1-4a4e-a88c-f9a1edd81cff 問題なく、動作しているのですが、 DataGridViewのCellValidatingイベントで、 各セルのエラーチェックを行っており、 入力した内容がエラーだった場合は、「e.Cancel = true」 を使用し、セルの移動をキャンセルさせています。 ここで、問題が発生しています。 カスタマイズしたDataGridViewでは、フォーカスを移動させて いるのにもかかわらず、CellValidatingイベントでは、 セルの移動をキャンセルしているため、 カスタマイズしたDataGridViewで 「セル値の変更をコミットまたは中止できないため、操作は成功しませんでした。」 とエラーが発生してしまいます。 何か良い解決方法はありませんでしょうか?? よろしくお願いします。

  • DataGridViewのカレントセル内の文字列を選択状態にする方法

    DataGridViewのカレントセル内の文字列を選択状態にする方法をご存知の方いませんでしょうか? セルにカーソルを移動することはできましたが、 移動先セル内の文字列全てを選択状態とすることができません。

  • 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)に何を記述すれば値を取得できますか?

  • DataGridViewでコードで値を入力したい

    VB2005のDataGridViewですが、行と列を指定して そのセルに値を入力したいと思いますが、どのプロ パティに行番号・列番号を入れればいいのでしょうか?

  • VB2005 DataGridViewの編集不可項目にただちに入力する方法はありますか?

    vb2005で開発中です。 DataGridViewのセルが Me.DataGridView1.CurentCell.ReadOnly = True で、編集不可としています。その項目にカーソルがある状態で、入力を開始したら、編集可能となり、その値がただちに反映させる方法はありますでしょうか? ・なにかキーを一度押して(KeyPress)から、 Me.DataGridView1.CurentCell.ReadOnly = False にする方法ならば、簡単ですが、そのなにかキーを押す手間を省きたいです。 ・また、なぜ一度 Me.DataGridView1.CurentCell.ReadOnly = True の状態にしたいかというと、 Me.DataGridView1.CurentCell.ReadOnly = False Me.DataGridView1.BeginEdit(True) で、編集可能し、全体を選択した状態で、右矢印を押すと、文字の最後にカーソルが来てしまい、次のセルに移動しないからです。 つまり、やりたいことは、セル上にカーソルがある時、右矢印を押したら、右のセルに移動。また、セル上にカーソルがある時、直接入力したいのです。 他の方法でも何かいい方法がありましたら、お教え下さい。 よろしくお願いいたします。

  • DataGridViewがクラッシュする

    VB2005を使用しています。 DataGridViewコントロールで、以下のようなコードを実行した際に、 DataGridViewコントロール自体が大きな赤い×の表示になることがあります。 (必ず発生するわけではありません。) 'クリア DataGridView1.Columns.Clear() 'DataSetをDataGridViewに格納 DataGridView1.DataSource = dtData '空の列を追加する DataGridView1.Columns.Add("NOP", "") '最終列の幅をFillにする DataGridView1.Columns("NOP").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill '編集不可にする For i = 0 To DataGridView1.Columns.Count - 1 DataGridView1.Columns(i).ReadOnly = True Next i '行幅は変更できないようにする DataGridView1.AllowUserToResizeRows = False '行Headerを非表示にする DataGridView1.RowHeadersVisible = False 'セルの選択方法は行毎にする DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect '1行のみ選択にする DataGridView1.MultiSelect = False '追加行は表示しない DataGridView1.AllowUserToAddRows = False '列幅を自動リサイズさせる DataGridView1.AutoResizeColumns() 'DataGridViewのフォントサイズを変更する DataGridView1.Font = New Font(DataGridView1.Font.Name, 11) '行高さを自動リサイズさせる DataGridView1.AutoResizeRows() 'Headerのアライメントを中央にする DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 同時に、次のメッセージボックスが表示されます。 「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。 [続行]をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。 [終了]をクリックすると、アプリケーションは直ちに終了します。 オブジェクト参照がオブジェクトインスタンスに設定されていません。」 どうすればこのような現象を回避することができるのでしょうか? どうかご教授ください。

専門家に質問してみよう