datagridviewについて

タグの編集
投稿者 うさぎ  (学生) 投稿日時 2011/11/27 23:02:57
VB2005を勉強中の者です。
Form上に2つのdatagridviewを配置しているのですが、datagridview1内のセルをクリックしdatagridview2内のセルをクリックすればどちらも選択されてしまいます。どちらか片方でしか選択できないようにしたいのですがどのようにすればいいのでしょうか。よろしくお願いいたします。 
投稿者 shu  (社会人) 投稿日時 2011/11/28 15:03:21
片方を選択したらもう片方を非選択状態にする。

例えば、こんな感じ
        For Each cell In DataGridView1.SelectedCells.OfType(Of DataGridViewCell)()
            cell.Selected = False
        Next
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/11/28 15:52:12
「一方を選択した場合は、他方は選択解除したい」という意味の場合:

Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, _
        ByVal e As EventArgs) Handles DataGridView1.SelectionChanged
    DataGridView2.ClearSelection()
End Sub

Private Sub DataGridView2_SelectionChanged(ByVal sender As Object, _
        ByVal e As EventArgs) Handles DataGridView2.SelectionChanged
    DataGridView1.ClearSelection()
End Sub


-------------------------------------------------------
「同じデータを表示しているときに、カーソルの連動を止めたい」という意味の場合:

'修正前 
Public Class Form1
    Private ds As New DataSet()
    Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles Me.Load
        Dim tbl As DataTable = ds.Tables.Add("Table1")
        tbl.Columns.Add("Col1"GetType(Integer))
        For r As Integer = 1 To 20
            tbl.Rows.Add(r)
        Next

        DataGridView1.DataSource = ds
        DataGridView1.DataMember = "Table1"

        DataGridView2.DataSource = ds
        DataGridView2.DataMember = "Table1"
    End Sub
End Class



'修正後 
Public Class Form1
    Private ds As New DataSet()
    Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles Me.Load
        Dim tbl As DataTable = ds.Tables.Add("Table1")
        tbl.Columns.Add("Col1"GetType(Integer))
        For r As Integer = 1 To 20
            tbl.Rows.Add(r)
        Next

        BindingSource0.DataSource = ds

        BindingSource1.DataSource = BindingSource0
        BindingSource1.DataMember = "Table1"
        DataGridView1.DataSource = BindingSource1

        BindingSource2.DataSource = BindingSource0
        BindingSource2.DataMember = "Table1"
        DataGridView2.DataSource = BindingSource2
    End Sub
End Class


-------------------------------------------------------

「TextBox.HideSelection = True のように、フォーカスが外れると選択状況を隠すが、
 フォーカスが戻ると元の選択状態に戻るようにしたい」という意味の場合:

Private Sub DataGridView1_Enter(ByVal sender As Object, _
        ByVal e As EventArgs) Handles DataGridView1.Enter
    DataGridView1.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight
    DataGridView1.DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText
End Sub

Private Sub DataGridView1_Leave(ByVal sender As Object, _
        ByVal e As EventArgs) Handles DataGridView1.Leave
    DataGridView1.DefaultCellStyle.SelectionBackColor = DataGridView1.DefaultCellStyle.BackColor
    DataGridView1.DefaultCellStyle.SelectionForeColor = DataGridView1.DefaultCellStyle.ForeColor
End Sub


-------------------------------------------------------

「ListView.HideSelection = False のように、フォーカスがあるときとないときで
 選択されているセルの色が変更されるようにしたい」という意味の場合:

Private Sub DataGridView1_Enter(ByVal sender As Object, _
        ByVal e As EventArgs) Handles DataGridView1.Enter
    DataGridView1.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight
    DataGridView1.DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText
End Sub

Private Sub DataGridView1_Leave(ByVal sender As Object, _
        ByVal e As EventArgs) Handles DataGridView1.Leave
    DataGridView1.DefaultCellStyle.SelectionBackColor = SystemColors.ButtonFace
    DataGridView1.DefaultCellStyle.SelectionForeColor = SystemColors.ControlText
End Sub
投稿者 うさぎ  (学生) 投稿日時 2011/11/28 17:41:53
ありがとうございました。
うまくいきました!
助かりましたm(__)m