VB.NETのDataGridview で、セルごとではなく、行全体で選択できるように
しています。
マウスで選択した行の値を取得するには、
1列目であれば
DataGridView(0, Me.DataGridView.CurrentCell.RowIndex).Value
で取得できるのですが、マウスクリックしなくても任意の行をカレント行
とすることは、できないのでしょうか?
DataGridView.Rows(n).Selected = True で特定の行を選択状態にしてみましたが、それではカレント行の値は変わりませんでした。
選択状態もリセットされてよいなら、CurrentCell をセットするのが手っ取り早いかな?
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim rowIndex As Integer = 8
DataGridView1.CurrentCell = DataGridView1(0, rowIndex)
End Sub
データバインド時(DataSource を設定している場合)には、CurrencyManager を使う手もあります。
Dim bnd As CurrencyManager = DirectCast(DataGridView1.BindingContext(DataGridView1.DataSource), CurrencyManager)
bnd.Position = 100
その他、BindingSource あるいは BindingNavigator を経由させる手もありますね。
Public Class Form1
Private ds As DataSet
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
ds = New DataSet()
Dim tbl As DataTable = ds.Tables.Add("Table1")
tbl.Columns.Add("ID", GetType(Integer))
tbl.Columns.Add("Name", GetType(String))
tbl.PrimaryKey = New DataColumn() {tbl.Columns("ID")}
For r = 1000 To 2000
tbl.Rows.Add(r, "TEST" & CStr(r))
Next
Me.DataGridView1.DataSource = Me.BindingSource1
Me.BindingSource1.DataSource = ds
Me.BindingSource1.DataMember = "Table1"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.BindingSource1.Position = 15
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Me.BindingSource1.Position = Me.BindingSource1.Find("ID", 1234)
End Sub
End Class
返信ありがとうございます。
簡単なCurrentCell をセットする方法でやろうとしたのですが・・・
現在のセルを非可視セルに設定することはできません。というエラーが出ました。非表示にしている行はないのですが。(列なら非表示にしている列はあります。)
> 簡単なCurrentCell をセットする方法でやろうとしたのですが…
再現可能なコードが無いので、呼び出す位置(イベントのタイミング等)に
問題があるのか、非表示列等にセットしているのか、エラーの原因までは
分かりませんが…さしあたり、(提示済みの)CurrentCell 以外の手法を
用いた場合はどうでしょうか?
非表示の列にセットされていたようです。
行のほうにばかり目がいって、気づきませんでした。
うまくいきました。ありがとうございます。
ツイート | ![]() |