GridViewの行クリックでポップアップ画面を開く

GridViewの行にハイパーリンク行を表示し、それのクリックによりポップアップWindowを表示するサンプルです。
データ検索結果を一覧表示した後、それの編集画面をポップアップ表示するといった使い方をよくやります。
今回は一覧表示の GridViewのRowDataBoundイベント中に、その行のセル内にあるLinkButtonの、OnClientClickプロパティに、ポップアップWindowを表示するクライアントスクリプトを埋め込む方法でやってみます。

Default.aspxから一部抜粋







<%# DataBinder.Eval(Container.DataItem, "Col1") %>






Default.aspx.cs


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class test_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//GridView1_RowDataBoundのイベントハンドラ設定
this.GridView1.RowDataBound += GridView1_RowDataBound;

this.GridView1.DataSource = dummydata1();
this.GridView1.DataBind();
}

}

protected void GridView1_RowDataBound(object sender,GridViewRowEventArgs e)
{
//e.Row.RowTypeがDataControlRowType.DataRow以外のものは、ヘッダ行とかフッタ行なので今回は関係ありません。
if (e.Row.RowType == DataControlRowType.DataRow)
{
//行内からFindControlでリンクボタンを取得し、OnClientClick にJavaScriptを記述する。
//URLの後ろにQueryStringでパラメータを追加すると、ポップアップ側の画面に引数を渡したりできます。
//たいていは、行データを識別可能なID値を使うことが多いと思います。
LinkButton lbt = (LinkButton)e.Row.FindControl("LinkButton1");
lbt.OnClientClick = "window.open('popup.aspx?prm="
+ DataBinder.Eval(e.Row.DataItem, "Col1").ToString() + "');return false;";
//ちなみに最後の"return false;"がない場合は、リンクボタンをクリックしてポップアップが開いた後ろ側で、無意味なPostBackが走ってしまいます。
}
}

//適当なサンプルデータのDataSetを作成
private DataSet dummydata1()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Col1");

DataRow dr;
dr = dt.NewRow();
dr["ID"] = "1";
dr["Col1"] = "strawberry";
dt.Rows.Add(dr);

dr = dt.NewRow();
dr["ID"] = "2";
dr["Col1"] = "grape";
dt.Rows.Add(dr);

dr = dt.NewRow();
dr["ID"] = "3";
dr["Col1"] = "orange";
dt.Rows.Add(dr);
ds.Tables.Add(dt);

return ds;
}
}

実行結果は以下のような感じ。
"grape"をクリックして開いたpopup側の画面では、Request.QueryString["prm"]の値をLabelに表示しています。