タイトル | : DataGridViewでのカーソルをセット |
記事No | : 8067 |
投稿日 | : 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
|