- - PR -
DataGridViewにカーソルの位置付をしたい
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-04 10:01
言語:Microsoft Visual Studio 2008
データベース:SQL Server 2005 非接続型のデータアクセス 現在、簡単なマスタメンテナンス画面を作成しています。 フォーム1のDataGridViewにTableAdapterを使ってデータを表示し、 フォーム2にフォーム1で選択されたデータの変更処理ができるようになっています。 (追加/修正/削除) そこで質問なんですが、フォーム2でデータの変更処理が行われた後、 フォーム1に戻りDataGridViewを再表示するのですが、 その時、修正対象となったデータにカーソルの位置付をするにはどうすればよいですか? 下記のようにコーディングしたのですが、うまくいきません。 よろしくお願いします。 Dim sqlDA As SqlDataAdapter = New SqlDataAdapter() sqlDA.MissingSchemaAction = MissingSchemaAction.AddWithKey Dim ds As DataSet = New DataSet() sqlDA.SelectCommand = New SqlCommand() If intkubun = 3 Then ’削除の場合 strsql = "SELECT TOP 1 CD FROM T_MAST WHERE (CD < '" & strCD & "') ORDER BY CD DESC" Else ’追加、修正の場合 strsql = "SELECT TOP 1 CD FROM T_MAST WHERE (CD = '" & strCD & "')" End If sqlDA.SelectCommand.CommandType = CommandType.Text sqlDA.SelectCommand.CommandText = strsql sqlDA.SelectCommand.Connection = New SqlConnection(My.Settings.MyAppConnect) sqlDA.Fill(ds, "MAST") If ds.Tables("MAST").Rows.Count > 0 Then strKye = ds.Tables("MAST").Rows(0).Item("CD").ToString() End If ' DataTable 内のデータ行取得 Dim findRow As DataRow = ds.Tables("MAST").Rows.Find(strKye) ' カーソルの位置付け For Each dgvRow As DataGridViewRow In .dgvList.Rows Dim row As DataRow = DirectCast(dgvRow.DataBoundItem, DataRowView).Row If row Is findRow Then dgvRow.Selected = True Exit For End If Next ' 選択されている行を取得 For Each r As DataGridViewRow In .dgvList.SelectedRows .dgvList.CurrentCell = .dgvList.Rows(r.Index).Cells(0) Next r ' 現在表示されている最初のセルを左上隅に設定する .dgvList.FirstDisplayedCell = .dgvList.CurrentCell | ||||||||||||
|
投稿日時: 2009-02-04 11:52
すみません。追記します。
実行した結果ですが、 dgvList.CurrentCell = .dgvList.Rows(r.Index).Cells(0) 上記コードのr.Indexが取得できていないようです。 データの行数を取得するにはどうすればいいでしょうか? | ||||||||||||
|
投稿日時: 2009-02-04 13:17
TableAdapterによってバインドされたDataGridViewのデータソースの行と
自前でとってきたDataSetの行とを Is演算子で比較してますが、 これはうまくいかないのでは? (持っている内容は同じでも内部的には別のオブジェクトですから)
ではなく、たとえば
などとしてみてはどうでしょう。 (ただし、もともと選択されていた行のSelectedをFalseにしていないので、複数選択されることになると思います)
とは何をみて「取得できていない」とおっしゃってるのでしょうか? ex) NullReferenceなどの例外がおきる 値が期待通りではない その行を通らなかった | ||||||||||||
|
投稿日時: 2009-02-04 16:02
dgvRow.Selected = True を通っていなかったため、r.Index=0になっていたという意味でした。 わかりずらくてすみません。 デューンさんの教えてもらった内容でうまく動作しました。 原因も理解できました。 ありがとうございました。 |
1