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