DataGridViewで1行全てを選択状態にする方法

このQ&Aのポイント
  • VB.NETのDataGridViewで選択したセルの行を全て選択する方法を教えてください。
  • DataGridViewのセルを選択した際に、そのセルと同じ行の全てのセルを選択する方法をお教えください。
  • DataGridViewで特定のセルをクリックした際に、その行の全てのセルを選択する方法について教えてください。
回答を見る
  • ベストアンサー

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)の所で境界外となって上手くいかないようです。 何か良い方法がありましたら、ご教授願います

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

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.1

DataGridViewのSelectionModeプロパティを「FullRowSelect」に設定します

guccyonn
質問者

お礼

そのようなその所にそのようなプロパティがあったのですね 参考になりました ありがとうございます

関連するQ&A

  • 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

  • データグリッドビュー右クリック選択について

    書き方法で右クリックにて セルの選択をしてコンテキストメニューを表示させて cellに追加文字を追加させることをしてます。 Multiselect=false で 選択はfullselectrow です。 データバインドでdatatableをバインドさせてます。 .CurrentRowが前のままになってしまって データがずれてしまいます。 どのようにすれば currentrowがきちんと取得できるでしょうか? Private Sub DataGridView1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown If e.Button = Windows.Forms.MouseButtons.Right Then DataGridView1.ClearSelection() If e.RowIndex < 0 Then Exit Sub DataGridView1.Rows(e.RowIndex).Selected = True End If End Sub

  • DataGridViewのセル編集完了後に値を設定するには

    VB.NETのDataGridViewについて質問です。 セル編集完了後に、編集した値が不正であるならその値をセル編集前に戻すというプログラムを作成しています。 しかし、現在値を正常に戻すことが出来ずに困っています。 現在は下記のように作成しています。 (1)CellBeginEditイベントを使用して、セル編集前の段階の値を「cellItem」変数に保存する (2)CellParsingイベントを使用して、保存した値で復元する。 (2)の段階で、下記の「cellItem」変数には値が入っているにも関わらず、セルに値が登録されていません。 尚、ボタンクリックイベント等で dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = cellItem を行うと、正常に値が登録されました。 セル編集完了後に値を戻すにはどのようにすれば良いのでしょうか? お分かりになる方がいらっしゃいましたら宜しくお願いします 'セル編集開始前 Private Sub dgv_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles dgv.CellBeginEdit cellItem = dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value End Sub 'セル編集完了後 Private Sub dgv_CellParsing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellParsingEventArgs) Handles dgv.CellParsing dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = cellItem End Sub

  • 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がコードを入力する列になります。 よろしくお願いいたします。

  • 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

  • イベント内で別イベントを呼ぶ方法

    早速質問させていただきます。 Form上にDataGridView(dgv)があります。 dgvのセルをマウスでダブルクリックした時に処理を入れております。 Private Sub dgv_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellDoubleClick   If e.RowIndex = -1 Then     Exit Sub   End If   '//処理 End Sub このdgv上でEnterキーを押した際に、ダブルクリックしたのと同じ処理を 行いたいのですが、このような場合、どのような実装をするのが一般的なのでしょうか? 例えば、下記の様にCall dgv_CellDoubleClick(sender, e)をするとEventArgsが合わないためエラーになってしまいます。 適切な方法をご教授お願い致します。 Private Sub dgv_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgv.KeyDown   If e.KeyCode = Keys.Enter Then     Call dgv_CellDoubleClick(sender, e)   End If End Sub

  • VB2005 Datagridview の仮想モードでメモリリーク

    VB2005にてDatagridviewの仮想モードを実装しています。 DataGridviewを全件ループ処理する場合にメモリが増加します。完了してもそのままメモリが減りません。これを回避する方法がありますか?CellValueNeededはメモリを消費し続けるものなのでしょうか。 実際のプログラムでは件数が多い場合にメモリの消費が止まらずメモリ不足に陥ります。 以下は単純なコードにしたサンプルです。これでもデバッグモードで動かすと起動時20Mくらいのメモリ消費がループ処理時に100Mくらいにに増えます。 ※実際の処理でバインドしているデータ(datatable等)の方をループさせるという代替案がありますが、今回はdatagridviewから行った結果のメモリ不足についてご教授いただければと思います。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With Me.DataGridView1 .Columns.Add("Column1", "列1") .Columns.Add("Column2", "列2") .Columns.Add("Column3", "列4") .Columns.Add("Column4", "列4") .Columns.Add("Column5", "列5") .Columns.Add("Column6", "列6") .Columns.Add("Column7", "列7") .VirtualMode = True .RowCount = 100000 End With End Sub Private Sub DataGridView1_CellValueNeeded(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellValueEventArgs) _ Handles DataGridView1.CellValueNeeded e.Value = e.RowIndex.ToString & "," & e.ColumnIndex.ToString End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 0 To DataGridView1.Rows.Count - 1 DataGridView1.Rows(i).Cells(1).Value = DataGridView1.Rows(i).Cells(2).Value Next MsgBox("終了") End Sub

  • 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

  •  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から値取得

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

専門家に質問してみよう