- PR -

動的にリンクボタンを配置してクリック時に呼びたい

1
投稿者投稿内容
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2009-01-22 16:37
お世話になります。

GridView コントロールのセルに動的にリンクボタンを配置してそのリンクボタンをクリックしたことを取得したいのですが下記のコードでは、うまくいきません。
ポストバックは、起きているようですが、そのあとに下記ハンドらが呼ばれていません。どうしたら呼べるようになるか教えてください。

ASP.NET C#

コード:
protected void GridView2_RowDataBound1(object sender, GridViewRowEventArgs e)
{
    :
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    for (int i = 0; i < e.Row.Cells.Count; ++i)
    {
         LinkButton myButton = new LinkButton();
         myButton.Text = "○";
         myButton.DataBinding += new EventHandler(TemplateControl_DataBinding);
         e.Row.Cells[i].Controls.Add(myButton); 
    }
  }
}
private void TemplateControl_DataBinding(object sender, System.EventArgs e)
{
     LinkButton lb = (LinkButton)sender;



よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2009-01-22 16:56
LinkButton がクリックされたことを検出したいんですよね?
提示されたコードですと DataBinding イベントにハンドラを用意していますが
これを Click イベントに変えたらどうなりますか?

たぶんですが、DataBinding イベントが発生しないのは
DataBinding イベントが RowDataBound イベントよりも前に
発生しているためかと思います。
(DataBinding イベントの発生時には、ハンドラの関連付けが処理されていないため)

_________________
C#と諸々
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2009-01-22 17:01
お世話になります。

myButton.Click += new System.EventHandler(this.TemplateControl_DataBinding);
に変更することで呼び出されるようになりました。

ありがとうございます。

ですが、もう一つ疑問ができました。というのは、動的作成時に、テキスト名がすべて同じなためどれがクリックされたか区別がつきません。
作成時にコメントか何か埋め込むことはできませんか?

教えてくださいお願いします。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2009-01-22 17:10
RowDataBound イベントハンドラで LinkButton のCommandArgument プロパティに ID などを格納しておけば良いかと。
_________________
C#と諸々
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2009-01-23 10:36
お世話になります。

遅くなりましたが、おっしゃる通り CommandArgument にIDの追加でうまく取得できました。

ありがとうございました。
1

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