第6回 Webサーバ・コントロール(前編)連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― (4/4 ページ)

» 2002年09月12日 00時00分 公開
[田口景介]
前のページへ 1|2|3|4       

■コマンド・ボタンとしての機能

 この3種類のWebサーバ・コントロールは、Clickイベントの代わりにCommandイベントを発生させるコマンド・ボタンとしても機能させることができる。コマンド・ボタンは、イベント発生時にイベント・ハンドラへパラメータを渡すことができるため、複数のコマンド・ボタンを1つのイベント・ハンドラでまとめて処理する目的などに利用できる。この種のボタンは主に、asp:DataGridコントロールのような、要素としてコントロールを羅列する機能を持つリスト・コントロールで利用される。コマンド・ボタンについては、リスト・コントロールの解説時にもう一度取り上げる。

 ボタン系コントロールをコマンド・ボタンとして利用するには、以下のようにOnClick属性の代わりにOnCommand属性を使ってイベント・ハンドラを指定し、CommandName属性とCommandArgument属性にコマンド名とパラメータを指定する。CommandName属性とCommandArgument属性の用途は特に決められておらず、クリックされたボタンをイベント・ハンドラで判断できるように、適当に指定すればよい。ただし、asp:DataGridコントロールでは要素のソートや編集を行うコマンドがあらかじめ定義されているため、これらコマンドを利用するには、CommandName属性にsortやeditなど、決められたコマンド名を指定する必要がある。

asp:Buttonコントロール

<asp:Button id="<コントロールID>"
  Text="<ラベル>"
  CommandName="<コマンド名>"
  CommandArgument="<コマンド引数>"
  OnCommand="<イベント・ハンドラ>" runat="server" />

asp:LinkButtonコントロール

<asp:LinkButton id="<コントロールID>"
  Text="<ラベル>"
  CommandName="<コマンド名>"
  CommandArgument="<コマンド引数>"
  OnCommand="<イベント・ハンドラ>" runat="server" />

asp:ImageButtonコントロール

<asp:ImageClick id="<コントロールID>"
  ImageUrl="<URL>"
  ImageAlign="<画像の配置位置>"
  AlternateText="<ラベル>"
  CommandName="<コマンド名>"
  CommandArgument="<コマンド引数>"
  OnCommand="<イベント・ハンドラ>" runat="server" />

 コマンド・ボタンに対するイベント・ハンドラは、次に示すシグネチャで定義する。Clickイベントでは、asp:ImageClickコントロールのイベント・ハンドラだけが異なるシグネチャで定義されていたが、コマンド・ボタンとして利用するときには、コントロールによらずイベント引数をCommandEventArgsオブジェクトとして受け取る。

void <イベント・ハンドラ名>(Object sender, CommandEventArgs e)

 CommandEventArgsクラスには、クリックされたコマンド・ボタンのCommandName属性値が格納されるCommandNameプロパティと、CommandArgument属性値が格納されるCommandArgumentプロパティが定義されている(表6.6)。この2つのプロパティへアクセスすれば、クリックされたコマンド・ボタンに指定されている属性値を読み出すことができる。

データ型 プロパティ 説明
string CommandName CommandName属性の値が格納される
object CommandArgument CommandArguemnt属性の値が格納される
表6.6 CommandEventArgsクラス(System.Web.UI.WebControls名前空間)

 リスト6.2にコマンド・ボタンを使ったサンプル・プログラムを示す。このASP.NETページにレイアウトされた3種類のボタンはすべて1つのイベント・ハンドラで処理され、クリックされたボタンの種類がテキスト・ボックスに表示される。

コマンド・ボタンを使ったサンプルASP.NETページ(control02.aspx)の実行例
control02.aspxの実行(www.iwebmethod.netのページ)

<%@ PAGE LANGUAGE="C#" %>
<html>
<head>
<script runat="server">
void command_Button(Object sender, CommandEventArgs e) {
  result.Text = e.CommandName + "(" + e.CommandArgument + ")";
}
</script>
</head>

<body>
<form runat="server">
  <asp:TextBox id="result" runat="server" /><br>
  <asp:Button Text="asp:Button 1"
    CommandName="asp:Button"
    CommandArgument="1"
    OnCommand="command_Button" runat="server" />
  <asp:Button Text="asp:Button 2"
    CommandName="asp:Button"
    CommandArgument="2"
    OnCommand="command_Button" runat="server" />
  <asp:ImageButton ImageUrl="button.gif"
    CommandName="asp:ImageButton"
    CommandArgument="0"
    OnCommand="command_Button" runat="server" />
  <asp:LinkButton Text="asp:LinkButton"
    CommandName="asp:LinkButton"
    CommandArgument="ABC"
    OnCommand="command_Button" runat="server" />
</form>
</body>
</html>


 今回は、すべてのサーバ・コントロールに共通する基礎的な事柄と、ボタン系のサーバ・コントロールについて解説した。次回も今回に引き続き、

  • テキスト系サーバ・コントロール
  • チェック・ボックス、ラジオ・ボタン
  • リスト系サーバ・コントロール

などのサーバ・コントロールについて、サンプル・プログラムを交えながら解説をする予定だ。

「連載 プログラミングASP.NET ― ASP.NETによるWebアプリケーション実践開発講座 ― 」のインデックス

連載 プログラミングASP.NET ― ASP.NETによるWebアプリケーション実践開発講座 ― 

前のページへ 1|2|3|4       

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。