- PR -

ASP.NET 動的に追加したImageButtonのClickイベントの処理

1
投稿者投稿内容
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2004-01-09 19:26
ASP.NET でとりあえず動作はしていますが、
現在のやり方はあまりにも原始的で、旧世代のコーディングだと
思うので、スマートなやり方があったら教えていただけないでしょうか。

データベースにデータを検索実施後、その結果を
WebControlのTableに書き出しています。
当然、データレコード数は可変です。

そのとき
1列目にファイル名、2列目に操作ボタンを書いています。
こんな感じになります。

-------------
aaa.jpg | 開く |
-------------

開くボタンはImageButtonコントロールを動的に追加しています。
上記の例ではaaa.jpgがデータベース上で内部的に100番という
キーが割り当てられていると仮定します。

さて、現在の私のソースでは、
ImageButton imgBtn = new ImageButton();
imgBtn.ID = "OPEN_" + 100.ToString();

imgBtn.Click += new System.Web.UI.ImageClickEventHandler( this.imgOpen_Click ) ;

と記述し、(=すなわち、IDにどのファイルに関する情報なのかを識別するIDを持たせ)
ハンドラとなる関数では、

private void imgOpen_Click( object sender , System.Web.UI.ImageClickEventArgs e )
{
// キャストします。
try
{
System.Web.UI.WebControls.ImageButton imgBtn =
( System.Web.UI.WebControls.ImageButton )sender ;

// _ でSplitあるいはIndexOfで _の位置を探してIDを取得
// できることは確認済
}
catch
{
// キャストに失敗した場合の処理
// Do Nothing
return;
}

}

このように、IDを取り出しています。

この処理自体は適切に動作しているのですが、
何かしょぼい(オブジェクト指向っぽくない)ような気がしてなりません。

例えば、VBの(VB.NETではなくVB)場合だったら、動的にボタンを追加するときに、
このような情報をTagプロパティに埋め込んで区別するなどの方法がありましたが、
ASP.NETでは、このような場合どのように書くのがスマートなのでしょうか。

なお、上記例では OPEN_というPrefixを使用していますが、
これは、同一ページ内に同じ100番のダウンロードを行わせるための
ダウンロードボタンも設けているため、単純に100番を
imgBtn.IDとするわけにはいかないのです。

(開くボタンのみならば、imgBtn.ID = "100"; とするのですが・・)
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-01-09 20:05
platiniさん、こんばんは。

引用:

この処理自体は適切に動作しているのですが、
何かしょぼい(オブジェクト指向っぽくない)ような気がしてなりません。


こんなの↓どうでしょう?

コード:
imgbtn.CommandName = "OPEN";
imgbtn.CommandArgument = 100.ToString();
imgbtn.Command += new CommandEventHandler(ImageButton_Command);

// ImageButton.Command イベントハンドラ
private void ImageButton_Command(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
    this.Response.Write(e.CommandArgument);
}

platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2004-01-09 20:15
きくちゃんさん ありがとうございます。
素晴らしいです。まだ、動作確認はしていませんが、
MSDNでCommandName,CommandArgumentのトピックを読みました。

こんなスマートな解決策を提供していただいてありがとうございました。
早速試してみます。
1

スキルアップ/キャリアアップ(JOB@IT)