• 締切済み

DataGridViewで指定行(列)の選択

VC++.NETのDataGridViewについての質問です。 プロパティ:SelectionModeに、「FullRowSelect」を設定すると、クリックした行が、選択状態になると思いますが、特定の列を除いて選択状態にするには、どのようにすればよろしいでしょうか? また、特定の列は、反転の対象外となるようにするには、どのようにすればよろしいでしょうか? ≪例≫ 5行×6列のデータの場合 2行目3列目をクリック -> 2行目の1列~2行目の6列目が反転 1行目1列目をクリック -> 1行目の1列~2行目の6列目が反転 【実現したい動作】 2行目3列目をクリック -> 2行目の2列~2行目の6列目が反転 1行目1列目をクリック -> 2行目の2列~2行目の6列目が反転状態は保持 上記、【実現したい動作】を実現する方法を、ご存知の方いらっしゃいましたら、ご教授お願いします。

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

FullRowSelectでは不可能でしょう。 MultiSelectをTrue、SelectionModeをCellSelectにした上でCellClick辺りのイベントを使って対象列のセルをSelectしていくしかないような……

mamamome
質問者

お礼

ご回答ありがとうございます。 やはり、不可能ですか… MultiSelect:True、SelectionMode:CellSelectも検討したのですが、その場合、マウスドラッグした際に複数列が選択されていまうため、うーん…と思っていたところです。 もう少し、ほかの案も検討してみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DataGridViewで列、行、セルの選択

    [環境] Windows7 Professional Visual Studio 2010 Professional お世話になります。 上記環境下にて、DataGridViewを用いたプログラムを 作っております。 そこで、タイトルの件なのですが DataGridViewの一番左(行ヘッダー)をクリックすると行選択、 一番上(列ヘッダー)をクリックすると列選択、 セルをクリックするとセル選択できるようにしたいと思っています。 しかし、DataGridViewのセル選択はSelectionModeという プロパティで制御しているようでして、以下の5種類の選択方法しかないようです。 (1) CellSelect 1 つ以上の個別のセルを選択できます。 (2) FullRowSelect 行のヘッダーまたは行内のセルをクリックすることによって行全体が選択されます。 (3) FullColumnSelect 列のヘッダーまたは列内のセルをクリックすることによって列全体が選択されます。 (4) RowHeaderSelect 行のヘッダー セルをクリックすることによって行が選択されます。個別のセルは、そのセルをクリックすることによって選択できます。 (5) ColumnHeaderSelect 列のヘッダー セルをクリックすることによって列が選択されます。個別のセルは、そのセルをクリックすることによって選択できます。 要するに、 (1)…セル選択のみ可能 (2)…行選択のみ可能(セルクリック時は行選択扱い) (3)…列選択のみ可能(セルクリック時は列選択扱い) (4)…行選択とセル選択のみ可能 (5)…列選択とセル選択のみ可能 ということなので、私の望む、 ・行選択と列選択とセル選択が可能 という制御は無理なのでしょうか。 ご存知の方いましたら、ご教示の程お願い致します。

  • DataGridViewで、選択した行の値を取得したい。

    VB2005環境です。 VB2005で、選択した行の、特定の列から値を取って、 テキストボックスに出力したいと思っています。 Itemプロパティかと思い、 TxtBox1.Text = Me.DataGridView1.Item _(0,Me.DataGridView1.CurrentRow.Index).ToString と記述してみました。1列目の、選択した行と交わるセルの 値が取れるかと思いきや、うまく取得できません。 方法を教えていただけないでしょうか? よろしくお願いします。

  • VB2005のDataGridViewについて

    プログラム側からはいろいろなセルに値を入力できて、 でも、ユーザー側からは行しか選択させない、かつ編集させないっていう方法ありますか? DataGridViewのSelectionModeをFullRowSelectにすると、 選択方法が行だけになるんですが、 入力もColumnIndexが0でないと、セルに値が入力できなくなってしまうんです。(つまり、1行につき1つのセルにしか入力できない) なんかいい方法はありますか?

  • DataGridViewの、選択されている行を取り出したい

    いつもお世話になっております。 DataGridViewに関して、選択されているレコードをDataRow型で別フォームに渡してから、各項目をテキストボックスに表示したいのですがうまくいきません(DataRow型にこだわっているわけではないのですが、レコード1件丸ごと取得する型を他に知らないので例として挙げました)。 DataGridViewのCurrentRowプロパティや、SelectedRows(0)をDataRow型に代入する試みをしましたが、型変換できませんでした。 DataGridViewで選択されているレコード一件まるごと変数に渡す方法というのはあるのでしょうか? ちなみに、SelectionModeはSelectFullRowに、MultiSelectはFalseにしてあります。 ご存知の方ご教授いただけると助かります。 よろしくお願いします。

  • 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 同時に、次のメッセージボックスが表示されます。 「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。 [続行]をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。 [終了]をクリックすると、アプリケーションは直ちに終了します。 オブジェクト参照がオブジェクトインスタンスに設定されていません。」 どうすればこのような現象を回避することができるのでしょうか? どうかご教授ください。

  • DataGridView 複数選択で行番号の取得

    Visual Basic 2008 を使っています。 DataGridViewで複数の行を選択したとき、それぞれが何行目なのかを取得するにはどうしたらいいでしょうか? 具体的には、複数選択されている行の0列目の値をテキストボックスに表示するという動作を行いたいです。 自分で書いたコードをペーストしておきます。 Dim count As Integer = Me.DataGridView1.SelectedRows.Count For count = 0 To count - 1 Dim test As String test = Me.DataGridView1.Rows(?何行目か).Cells(0).Value Me.TextBox4.Text = test & "が選択されています。" & vbCrLf & zenkai Dim zenkai As String = Me.TextBox1.Text Next

  • DataGridViewでの選択行の取得

    VB2008ExpressEditionを使用しています DataGridViewで行選択モードにし、現在どこの行が選択されているか 取りたいのですが、どのプロパティでしょうか? SelectedIndexというプロパティは出てきません。 For i As Integer = 0 To dgvList.RowCount - 1 If dgvList.SelectedRows(i).Selected = True Then End If Next という回りくどい方法でも RowCountが3あったとしても dgvList.SelectedRows(i).Selectedで 1行目(dgvList.SelectedRows(0).Selected)は参照できますが 2行目(dgvList.SelectedRows(1).Selected)で、落ちます。 分かる方いないでしょうか。

  • DataGridViewの複数の指定行を取込には

    Win2003SERVER(R2)+SRLServer2000+VB.NET2008の 組合せでやっています。 VBは初心者です。 今、DataGridView1で下記の様なデーターがフォームに 表示されています。 A B C 1 11 AAA 2 22 BBB 3 33 CCC 5 55 DDD 6 66 EEE この画面でCtrlキーを押しながら Aの列の 1 3 5の列を選択しました。 その状態でBotan1を押したとき Bの列の 11 33 55 を変数 B(1) B(2) B(3) に呼込みたいのですが どうしたらいいのでしょうか 1行だけの場合、 B(1)=Me.DataGridView1(1, Me.DataGridView1.CurrentCell.RowIndex).Value をで良いと思っていますが 複数の場合はどうしたらいいのでしょうか。 ご存知の方、教えてください。

  • DataGridViewの行取得

    VB2010です。 DataGridViewのDataSourceにコレクションを設定しており、 このコレクションのアイテムを指定してDataGridViewに表示されている行インデックスを取得したい。 以下、現状のコードです。Form1にDataGridView、ボタン、テキストボックスを貼り付けており、 テキストボックスに名前を入力してボタンをおすとその行を選択状態とします。 行を取得するために行頭から順に調べておりますが、 アイテムを指定して行を参照できるようなプロパティなり なにか良い方法が無いでしょうか? Public Class Form1 Private _persons As Collection Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load _persons = New Collection _persons.Add(New Person With {.Name = "あかい", .Age = 10}, "あかい") _persons.Add(New Person With {.Name = "いまい", .Age = 13}, "いまい") _persons.Add(New Person With {.Name = "うかい", .Age = 43}, "うかい") _persons.Add(New Person With {.Name = "えのき", .Age = 8}, "えのき") _persons.Add(New Person With {.Name = "おかの", .Age = 3}, "おかの") DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect DataGridView1.DataSource = _persons Dim col As New DataGridViewColumn col = New DataGridViewTextBoxColumn col.DataPropertyName = "Name" col.Name = "NameField" DataGridView1.Columns.Add(col) col = New DataGridViewTextBoxColumn col.DataPropertyName = "Age" col.Name = "AgeField" DataGridView1.Columns.Add(col) End Sub Private Class Person Public Property Name As String Public Property Age As Integer End Class Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim name As String = TextBox1.Text If name.Length = 0 Then Return If Not _persons.Contains(name) Then Return Dim person As Person = _persons.Item(name) For i As Integer = 0 To DataGridView1.Rows.Count - 1 Dim rowItem As Person = DataGridView1.Rows(i).DataBoundItem If rowItem.Equals(person) Then DataGridView1.Rows(i).Selected = True End If Next End Sub End Class

  • C# DataGridView特定セルの入力フォーム変更について

    C# DataGridView特定セルの入力フォーム変更について C# DataGridViewについての質問です。 DataGridViewで1列目のコンボボックスを選択した値によって、その行のみ 2列目の入力フォームを変更したいのですが、その様なことは可能でしょうか? 例.1行目1列目コンボボックス「a」選択時、1行目2列目コンボボックス表示   2行目1列目コンボボックス「b」選択時、2行目2列目テキストボックス表示   3行目1列目コンボボックス「c」選択時、3行目2列目チェックボックス表示 列全体の入力フォームを変更する処理なら分かるのですが、特定のセルのみ変更する 方法が分かりません。 もし可能であれば実現方法も教えて頂けると非常に助かります。 宜しくお願いします。