DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ASP.NET2.0でのGridViewの内容の書き換え

環境/言語:[.NET2.0]
分類:[ASP.NET]

2008/10/17(Fri) 14:04:13 編集(投稿者)
2008/10/17(Fri) 14:04:09 編集(投稿者)

ASP.NET2.0でGridViewを使っているのですが、
ハイパーリンクの書き換えに詰まってしまいました

通常デザイナーで
HyperLinkFieldを設定し、
NavegateUrl:~/hoge.html
DataNavigateFormatString:~/hoge.html?={0}
とすれば、
データベースを元にリンク先を色々変えられますが、

NavigateUrlにJavaScriptを設定したい場合がうまくいきません

htmlファイルに
foo(hikisuu){
...
}

という関数があって、これを呼びたいのですが

NavigateUrl:Javascript:foo
DataNavigateFormatString:Javascript:foo({0})
してもリンクはJavascript:fooにしかならないです

もう、デザイナーでは空白にしてしまって
page_loadかなんかの内部で書き換えようと思っているのですが
今度は、その書き換え方法がわかりません

GridViewのなかのHyperLinkgFieldのリンク先をプログラムで書き換えるにはどうくんだらいいのでしょうか
ハイパーリンクフィールドなるものを使ったことはありませんが…
おそらく以下の方法でいけそうな気もします(テストはしていないので、適宜テストをお願い致します。)

手順1:ハイパーリンクフィールドをテンプレートフィールドに変換して下さい
手順2:GridViewのメニューからテンプレートフィールドの編集を選択して下さい
手順3:ハイパーリンクがHypreLink1という名前でItemTemplateに格納されているはずなので任意のID(hypTestと過程します)
手順4:テキストバインディングを行って下さい( Eval("要素名") で出来ます)
例えば、データセットのLinkURLというカラムの内容をバインドする場合は
Eval("LinkURL")です。
手順5:ここから設定です。以下のソースではGridViewをgrdLinkとします。適宜コントロールIDは修正して下さい

GridViewにデータをバインドした後に

for (int i = 0 ; i < grdLink.Rows.Count ; i ++)
{
   //xxには何列目にリンクがあるかを指定して下さい
   HyperLink hyp1 = grdLink.Rows[i].Cells[xx].FindControl("hypTest") as HyperLink;

//動的に変えるための条件式を指定します(例えばhyp1のテキストがURLの場合)
   hyp1.Attributer.Add("onclientclick" , "return foo('" + hyp1.Text + "');");
}

上記で例えばハイパーリンクにhttp://dobon.netと記載されていた場合、
そのリンク先はhttp://dobon.netとなるはずです。

他にもif分岐などもございますので、お試し下さい

DOBON.NET | プログラミング道 | プログラミング掲示板