misc.log

日常茶飯事とお仕事と

ASP.NETのGridViewでセルにHyperLinkを

AccessDataSourceとバインドしたGridView内のセル内文字列をクリックするとそのセルにある情報に対応したページに飛ぶ、という機能を実現してみたかったのだが、なんとかできた。

GridViewを選択してプロパティにある「Columns」から、「フィールド」ダイアログを開く。そこに、「HyperLinkField」があるので、これを「選択されたフィールド」に追加。そこで以下の設定を。ここでは、「PC管理テーブルにある1行(PC1台に相当)をクリックすると、そのPCの詳細情報ページに飛ぶ」というのをやってみた。

  • DataTextFieldプロパティに、リンクの字面として使う文字列を出すためのフィールド名を指定。たとえば、今やりかけているPC管理台帳の場合、PC管理番号みたいな列名を入れておく。
  • DataNavigateUrlFormatStringプロパティに、PC詳細情報ページのリンクと、その後ろにPCを特定するQueryStringを記述。ただし、QueryStringに渡す文字列は選択された行ごとに変わるので、「PCDetail.aspx?PCNo={0}」のようにしておく。これで、後述の設定に指定したフィールドの値が「{0}」のところに当てはめられる。
  • DataNavigateUrlFieldsプロパティに、上述のFormatStringプロパティに当てはめられる文字列に対応するフィールド名を列挙する。この場合、PCを特定する番号に相当するフィールド名を書いておけばOK。

これで、セルには「見た目はPC管理番号だが、クリックするとPCを特定するインデックス情報(通番)をQueryStringにしたリンクに飛ぶ」というのが実現できた。


このあたり、ちょっとヘルプが不親切ね。


で、このハイパーリンク化した列でソートも可能にするには、同じくColumnsプロパティから、HyperLinkField列のSortExpressionプロパティに、ソート条件として使うフィールド名を指定しておけばOKみたい。