DataGridView のカレント行

解決


 2012-08-27 12:57:25  No: 147762  IP: [192.*.*.*]

VB.NETのDataGridview で、セルごとではなく、行全体で選択できるように
しています。
マウスで選択した行の値を取得するには、
1列目であれば
DataGridView(0, Me.DataGridView.CurrentCell.RowIndex).Value
で取得できるのですが、マウスクリックしなくても任意の行をカレント行
とすることは、できないのでしょうか?
DataGridView.Rows(n).Selected = True で特定の行を選択状態にしてみましたが、それではカレント行の値は変わりませんでした。

編集 削除
魔界の仮面弁士  2012-08-27 13:41:19  No: 147763  IP: [192.*.*.*]

選択状態もリセットされてよいなら、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

編集 削除
てぃ  2012-08-28 09:45:40  No: 147764  IP: [192.*.*.*]

返信ありがとうございます。
簡単なCurrentCell をセットする方法でやろうとしたのですが・・・
現在のセルを非可視セルに設定することはできません。というエラーが出ました。非表示にしている行はないのですが。(列なら非表示にしている列はあります。)

編集 削除
魔界の仮面弁士  2012-08-28 12:56:58  No: 147765  IP: [192.*.*.*]

> 簡単なCurrentCell をセットする方法でやろうとしたのですが…
再現可能なコードが無いので、呼び出す位置(イベントのタイミング等)に
問題があるのか、非表示列等にセットしているのか、エラーの原因までは
分かりませんが…さしあたり、(提示済みの)CurrentCell 以外の手法を
用いた場合はどうでしょうか?

編集 削除
てぃ  2012-08-28 14:59:10  No: 147766  IP: [192.*.*.*]

非表示の列にセットされていたようです。
行のほうにばかり目がいって、気づきませんでした。

うまくいきました。ありがとうございます。

編集 削除