- - PR -
GridViewとfocusの関係
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-21 19:01
<前提>
言語:ASP.NET 2.0 (VB.NET) 環境:VisualStudio2005 <要件・質問> GridViewでソート利用時の列名リンクにフォーカスを設定したいが、実現方法が分かりません。 <何が問題か?> 1)Focusメソッドは、原則、コントロール単位にフォーカス設定するものであるので、GridView「全体」にフォーカス設定は可能である。一方、今回実現したい「ソート利用時の列名リンク」はGridViewの「中身」であるため、そもそも実現可能か分からない。(ただ、Tabキーにて当該リンクにフォーカスが移動するので、不可能ではないような気がしています。) 2)Focusメソッド、コントロール単位のみならず、HTMLタグのid単位に設定することも可能である。(例えば、RadioButtonListコントロール"rdolstXXXX"の1個目のボタンにフォーカス設定したいときは、当該タグでidとして振られている"rdolstXXXX_0"にフォーカスを設定することができる。) しかしながら、今回、GridView内の列名リンクには、HTML上、そのようなidが振られることはない。(GridView全体として、Tableタグにidが振られる。) 3)helpを見てみましたが、それらしいものが見つかっておりません。(ListView.FocusedItemプロパティというものを利用できないかと考え実装してみましたが、そもそもListViewクラスなど無い!とコンパイルエラーとなる。) 拙い日本語で大変恐縮ですが、どなたかご教示頂けると幸いです。 以上、宜しくお願い致します。 | ||||||||
|
投稿日時: 2006-11-22 01:27
GridViewの列名リンクの先頭にフォーカスがあたればよいのであれば、単純に
GridViewにたいしてSetFocusするだけでいいようですが。 | ||||||||
|
投稿日時: 2006-11-22 10:05
どっとねっとふぁんさん、ご回答ありがとうございます。
質問の仕方が悪かったです。不慣れだと、質問するにも一苦労です。。。 「本当の」要件は以下の2つでした。 <要件1> ソートリンクをクリックした時、フォーカスがクリアされてしまう(「どこかに飛んでいってしまう」)ところを、フォーカスを移動させたくない。 すなわち、例えば、列名リンクの2列目のリンクをクリックした時に、ソート処理後も2列目にフォーカスが設定されているようにしたい。 (→これを実現するために、列名リンクの「特定の」リンクにフォーカスを設定したいと考えておりました。) <要件2> TabIndexを「特定の」リンク毎に設定したい。 (GridViewコントロールにTabIndexを設定すると、GridView「全体」にフォーカスが設定されてしまう。) (→列名リンクの「特定の」リンクにフォーカスが設定できるのであれば、「特定の」リンクにTabIndexを設定できると考えておりました。) 以上の要件を満たす実装方法があればご教示頂けると幸いです。 宜しくお願い申し上げます。 | ||||||||
|
投稿日時: 2006-11-24 01:26
まず、TabIndexですが、
てなかんじでできませんか? さらに、これを応用すると、フォーカス設定も、
てなかんじでできませんか? | ||||||||
|
投稿日時: 2006-11-24 10:43
ぼのぼのさん、ご返答ありがとうございます。
下記コードですが、うまくいきませんでした。 CType(GridView1.HeaderRow.Cells(0).Controls(0), LinkButton).TabIndex = 10 「GridView1.HeaderRow」でNullReferenceExceptionとなります。 「GridView1」はオブジェクトのインスタンスあり。 (当然、「GridView1」は適切なオブジェクト名に変えてデバッグしております。) 発想としては納得感のあるやり方だと思ったのですが。。。 何か、うまい方法があればご教示願いたく存じます。 宜しくお願いいたします。 | ||||||||
|
投稿日時: 2006-11-24 11:33
どのタイミングで取得して設定していますか? DataBind の前にやろうとしていませんか? これでもできた
_________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2006-11-24 16:37
かるあさん、ご返信ありがとうございます。
ご指摘の通り、DataBind の前にやろうとしていました。。。 (GridView_Databoundで実装したつもりだったのですが。。。) お恥ずかしい限りです。。。 かるあさんのコードにつき、正常(要件通り)にTabIndex設定されることを確認致しました。(DirectCastとCTypeの違いにつき、あまり理解していませんが。。。) そこで、もう1つ教えて頂きたいのですが、、、 <質問> <要件1>を実現するにあたり、どの項目(列)でソートリンクが押下されたかを取得する方法はないでしょうか。(<要件1>については下記に再掲致します。) <要件1> (再掲) ソートリンクをクリックした時、フォーカスがクリアされてしまう(「どこかに飛んでいってしまう」)ところを、フォーカスを移動させたくない。 すなわち、例えば、列名リンクの2列目のリンクをクリックした時に、ソート処理後も2列目にフォーカスが設定されているようにしたい。 <問題点(?)> SortExpressionプロパティでは、バインドしたデータソースの項目名が取得されてしまい、フォーカス設定するコントロールを指定することができませんでした。 以上、度重なる質問で大変恐縮ですが、宜しくお願い申し上げます。 | ||||||||
|
投稿日時: 2006-11-24 18:14
なんとなくやってみた
パラメータの SortExpression と同じ カラムの SortExpression を見つけて、 そのヘッダーをフォーカスしてあげる。
そうくると、じゃんぬさんのブログかな http://blogs.wankuma.com/jeanne/archive/2005/03/18/12271.aspx _________________ かるあ のメモ と スニペット |