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

Tableコントロール内のLinkボタンクリックイベントの捕捉

環境/言語:[VisualStudio2010Express(C#)  SqlServer2008Express WebDeveloper2010Express]
分類:[ASP.NET]

カスタマイズしたリストを作成するため、データベースから取得したデータをGridViewではなく、Tableコントロールに表示しようとしています。

ある列に、Linkボタンコントロールを配置しましたが、このクリックイベントが取れません。

以下のようなコード(省略しています。)で、クリックイベントをLnk_btn_Click関数で捕捉しようとしましたが、駄目でした。

親にあたるTableコントロール自体にClickイベントがないためでしょうか?

どのようにLinkボタンコントロールのイベントを取ることができるのでしょうか?
よろしくお願いします。

protected void MakeTable(int cell_num, int row_num, SqlDataReader db_read)
{
for (int i = 0; i < row_num; i++) // 行
{
TableRow tbl = new TableRow();

for (int j = 0; j < cell_num; j++) // 列
{
TableCell cell = new TableCell();

if (j == 2) // Tableの3列目をリンクボタンの列にする。
{
LinkButton Lnk_btn = new LinkButton();

Lnk_btn.Text = db_read[2].ToString(); // DBから取得した3列目をリンク用に表示

Lnk_btn.Click += new EventHandler(Lnk_btn_Click);

cell.Controls.Add(Lnk_btn);
}
}
}
}
■No28320に返信(tfさんの記事)
> 親にあたるTableコントロール自体にClickイベントがないためでしょうか?
いいえ、LinkButton.Click イベントが発生するはずですので Table コントロールに
Click イベントがないことは問題ありません。

> どのようにLinkボタンコントロールのイベントを取ることができるのでしょうか?
TableRow オブジェクトに TableCell オブジェクトを追加する処理と
Table コントロールに TableRow オブジェクトを追加する処理が省略されているよう
ですが Table コントロールへの LinkButton コントロールの追加は行われています
か。

LinkButton.Click イベントへのイベントハンドラの関連付けはコードを拝見する限
り問題ないように思います。MakeTable を呼ぶタイミングが関わっているのではない
かと思います。
LinkButton.Click イベントは Page.Load イベントのあとに呼ばれます。それよりも
早いタイミングで MakeTable を呼ぶ必要があります。Page.PreInit や Page.Init 
あたりが適当かと思います。
MakeTable を呼ぶタイミングを見直してみてはいかがでしょうか。
ありがとうございます。

TableコントロールのInitイベント処理で行うようにしたら、クリックイベントが捕捉できるようになりました。
ちなみにLoadイベントでも可能でした。

ご指摘のようにTableRow オブジェクトの追加は省略して記載していました。
ありがとうございました。


■No28327に返信(もりおさんの記事)
> ■No28320に返信(tfさんの記事)
>>親にあたるTableコントロール自体にClickイベントがないためでしょうか?
> いいえ、LinkButton.Click イベントが発生するはずですので Table コントロールに
> Click イベントがないことは問題ありません。
>
>>どのようにLinkボタンコントロールのイベントを取ることができるのでしょうか?
> TableRow オブジェクトに TableCell オブジェクトを追加する処理と
> Table コントロールに TableRow オブジェクトを追加する処理が省略されているよう
> ですが Table コントロールへの LinkButton コントロールの追加は行われています
> か。
>
> LinkButton.Click イベントへのイベントハンドラの関連付けはコードを拝見する限
> り問題ないように思います。MakeTable を呼ぶタイミングが関わっているのではない
> かと思います。
> LinkButton.Click イベントは Page.Load イベントのあとに呼ばれます。それよりも
> 早いタイミングで MakeTable を呼ぶ必要があります。Page.PreInit や Page.Init
> あたりが適当かと思います。
> MakeTable を呼ぶタイミングを見直してみてはいかがでしょうか。
解決済み!

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