- PR -

LinkButtonの動的配列のイベントハンドラ

1
投稿者投稿内容
zoo8
会議室デビュー日: 2005/01/24
投稿数: 14
投稿日時: 2005-01-24 18:04
始めまして。早速質問させていただきます。

[開発環境]
OS:Windows2000
言語:VB.NET
.NET:var1.1

[実現したい処理]
DBからデータを取得し、TABLEを生成
その一行ごとにLinkButtonを動的に生成
クリックされたLinkButtonの行のデータをSessionオブジェクトへ渡して次の画面へRedirect


**ソース抜粋
Protected linkbutton() As System.Web.UI.WebControls.LinkButton 'フォームには貼り付けていません

Private Sub function()
=============
DB検索処理
=============

Redim linkbutton(検索データ.Count -1)

' DB検索処の後のTABLE生成
For rowNum = 0 To 検索データ.Count -1
============
テーブルのカラムへデータを登録
============
linkbutton(rowNum) = New LinkButton
AddHandler linkbutton(rowNum).Click, AddressOf linkbutton_Click

' 行をテーブルへ登録
Next rowNum
End Sub
**ソース抜粋終り
上記のような流れの処理を書いています。
これだとPostBack時に破棄されてしまって
(このあたりが私が未熟なため確実ではないのですが)
linkbutton_Clickで捕まえられられないようです。
どうにかSessionオブジェクトへ上記のような[実現したい処理]で
渡す良いアイディアはないでしょうか。
DataGridだとPostBackしてもデータを参照できたことと、
値の受け渡しはSessionオブジェクトで行いたいという設計方針なので
このような処理を試しています。
[実現したい処理]で無理なようであれば、
URLの後につなげて渡すような形で提案してみようと思います。

よろしくお願いします。
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2005-01-24 19:50
テンプレート列でリンクボタンを貼り付け
(ItemTemplateに貼り付けておきます)
もしくは選択のボタン列を追加します。
リンクボタンのテキストをデータと連結したい場合は
ボタン列の場合は
コード:
<asp:ButtonColumn Text="選択" DataTextField="列名" 
  HeaderText="列A" CommandName="Select"></asp:ButtonColumn>


テンプレート列の場合は
コード:
<ItemTemplate>
  <asp:LinkButton id=LinkButton1 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.列名") %>' 
    CommandName="Select"></asp:LinkButton>
</ItemTemplate>



みたいに作っておきます。

それでItemCommandイベント使って
コード:
private void Grid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
  if ( e.CommandName == "Select" )
  {
    ここで値をとってセッションにでもいれてページ遷移すれば・・・
  }
}


ここでは選択行のデータがeでとれるので
e.item.cells[列番号].Controls[]とか
((TextBox)e.item.cells[列番号].FindControl(コンポーネント名)).Text
とかいろいろ駆使してやってみてください

行のデータそのまま渡すのでもいいですし
キー情報渡して向こうで取り直してもいいですかね

zoo8
会議室デビュー日: 2005/01/24
投稿数: 14
投稿日時: 2005-01-24 20:28
レスありがとうございます。

申し訳ありません!!
今回はDataGridは使用せず、
System.Web.UI.WebControls.Table
で直接Cell、Rowの追加を行ってTableを作成しています。
(これをはっきりと書いておくべきでした)

なぜWebControls.Tableを使うようになっているかというと
1.奇数行、偶数行で背景色を変える
2.特定条件のとき、セルのフォント色を赤に変える
3.セルの連結(縦)
これらができそうにないからだということでした。
しかし、これを聞いてから少し調べてみたところできそうな記事を見つけ、現在テストコードを書いている途中です。
もしも上記3件が実現可能であればDataGridでそろえるということになるようですので、
引き続き
System.Web.UI.WebControls.Tableを使った方法、
また、上記3件が可能/不可能だけでもアドバイスをいただければと思います。


PoHさん、サンプルコードまで載せていただき本当にありがとうございました。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-01-24 20:40
引用:

zoo8さんの書き込み (2005-01-24 20:28) より:
1.奇数行、偶数行で背景色を変える
2.特定条件のとき、セルのフォント色を赤に変える
3.セルの連結(縦)




.NET Tips
の応用でいずれも可能かと。
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2005-01-24 20:52
引用:

zoo8さんの書き込み (2005-01-24 20:28) より:
なぜWebControls.Tableを使うようになっているかというと
1.奇数行、偶数行で背景色を変える
2.特定条件のとき、セルのフォント色を赤に変える
3.セルの連結(縦)


ここら辺を応用すれば可能かと。
http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html#i17

#もろかぶった

[ メッセージ編集済み 編集者: まゆりん 編集日時 2005-01-24 20:53 ]
zoo8
会議室デビュー日: 2005/01/24
投稿数: 14
投稿日時: 2005-01-24 20:58
todoさん、こんばんわ。

今のところTableとDataGridへのデータのセットしかたの違いから調べているところです。
理解し次第、教えていただいたリンク先を参考に、DataGridを使ってのプログラミングをしてみようと思います。

できるということが確実になったので時間を節約できそうです。
どうもありがとうございました。
1

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