tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataGridViewでのカーソルをセット
記事No8067
投稿日: 2008/09/03(Wed) 13:48
投稿者不二子
VB2005、SQLServer2005環境です。
度々お世話になります。以前も「DataGridView」についてご教授していただいた者ですが、
その後、新たにわからないことがあり投稿させていただきました。
FormA、FormBの2つのフォームがあり、FormAは「DataGridView」でデータを表示し、
FormBはFormAで選択されたデータを呼び出し新規登録/修正/削除処理を行っています。
FormBでデータが更新されFormAに戻った時、「DataGridView」を再表示し、その該当レコードにカーソルをセット
までは正常に動作しています。
しかし「DataGridView」に表示できる件数が10件で検索対象となったデータが20件目にあった場合、
カーソルは20件目にセットされているのですが、スクロールバーでスクロールしないとそのデータが画面上で確認できません。
該当レコードにカーソルがセットされ、さらにそのレコードが「DataGridView」でスクロールせずに確認できるにはどうすればよろしいですか?
また、データを削除した場合は、削除対象の1件前のレコードに位置づけたいのですがその方法も教えてほしいと思います。
よろしくお願いします。

下記は「DataGridView」を再表示してカーソルをセットしているRードです。

    Private Sub 一覧再表示()
        Dim strsql As String
        Dim strCode As String = Nothing
        Dim findVals(1) As Object
        
        '///DB接続省略///
        '-------------
        'DataGridView再表示
        '-------------
        strsql = "SELECT 都道府県コード, 市町村コード, 市町村名 FROM TM市町村マスタ ORDER BY 都道府県コード, 市町村コード"
        Dim comm As SqlCommand = New SqlCommand(strsql, Con)
        Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm)
        dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
        Dim ds As DataSet = New DataSet()
        dataadapter.Fill(ds, "市町村マスタ")
        dgrview.DataSource = ds
        dgrview.DataMember = "市町村マスタ"
        '-------------
        'カーソルセット
        '-------------
        Dim command As New SqlClient.SqlCommand
        command.Connection = Con
        command.CommandType = CommandType.Text
        strsql = "SELECT * FROM TM市町村マスタ WHERE (都道府県コード = @Key1) and (市町村コード = @Key2)"
        command.Parameters.Clear()
        command.Parameters.Add("@Key1", SqlDbType.VarChar).Value = TXT_都道府県コード.Text
        command.Parameters.Add("@Key2", SqlDbType.VarChar).Value = TXT_市町村コード.Text
        command.CommandText = strsql
        Dim sr As SqlClient.SqlDataReader
        sr = command.ExecuteReader()
        command.Dispose()
        If Not sr.HasRows Then
            '一行前のデータにカーソルをセット
            ???
        Else
            While sr.Read
                findVals(0) = sr("都道府県コード").ToString()
                findVals(1) = sr("市町村コード").ToString()
            End While
        End If
        sr.Close()
        Dim findRow As DataRow = DirectCast(dgrview.DataSource, DataSet).Tables("市町村マスタ").Rows.Find(findVals)
        For Each dgvRow As DataGridViewRow In dgrview.Rows
            Dim row As DataRow = DirectCast(dgvRow.DataBoundItem, DataRowView).Row
            If row Is findRow Then
                dgvRow.Selected = True
                Return
            End If
        Next
    End Sub

[ツリー表示へ]
タイトルRe: DataGridViewでのカーソルをセット
記事No8102
投稿日: 2008/09/08(Mon) 19:40
投稿者るしぇ
準備されている命令は一覧表になってるから、全ての説明を読んでおくくらいは
普通のことだけどね。
[DataGridView メンバ]
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview_members(VS.80).aspx

DataGridView はメンバが多いけど、それでも説明だけを読むことにすれば1時間程度。
プロテクトなメンバは飛ばせばいいから、もっと短縮できます。
FirstDisplayed〜 系のものが使えそうなのでは?
※注)サポート対象 : .NET Framework 2.0

[ツリー表示へ]
タイトルRe^2: DataGridViewでのカーソルをセット
記事No8181
投稿日: 2008/09/19(Fri) 13:25
投稿者不二子
解決できました。
長い間お返事できなくて申し訳ありませんでした。

[ツリー表示へ]