- - PR -
[ASP.NET] 動的に作成したラジオボタンの選択項目の取得
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-06-24 20:59
はじめまして。 kunar というものです。
現在 ASP.NET(VB.NET)でWebアプリケーションの開発を行っております。 DBから持ってきたデータを Table に表示しラジオボタンを 配置、編集したい行をラジオボタンで選択させて 編集するページに遷移させたいと考えております。 遷移する際にラジオボタンの選択項目を取得する必要が あるのですが、ボタンを押下するとページが再読み込みして 動的に作成した行が消えてしまいます。 すると NullReferenceException が発生して選択項目が取得 できなくなってしまいます。 visible で制御しようとしたのですがデータの件数が1000件 程あって現実的でないので断念しました。 どなたか解決策をお持ちでしたら是非ご教授してもらえませ んでしょうか? よろしくお願いします。 |
|
投稿日時: 2004-06-25 01:13
具体的にどうなのかが文脈からよく判らないのですが、そもそもTableとは何を指していますか?
・Response.WriteでTableタグを吐いている? ・Tableコントロール? ・DataGrid? |
|
投稿日時: 2004-06-25 10:10
まるくさん返答ありがとうございます。
Table コントロールを使用しています。 まず一行(項目名)だけ用意しておき、後から データ件数に応じて行を増やしていっています。 開発環境 は WinXP Pro + VS.NET 2003 です。 以下ソースです。 【HTML】(元々あるテーブル)--------------------------------- <asp:table id="tblFindResult" runat="server" Visible="False"> <asp:TableRow ID="rowTitle"> <asp:TableCell Text="選択欄" ID="cellTitleSelect"></asp:TableCell> <asp:TableCell Text="契約No" ID="cellKeiyakuNo"></asp:TableCell> <asp:TableCell Text="契約名" ID="cellKeiyakuName"></asp:TableCell> <asp:TableCell Text="開始日" ID="cellLeaseBeginYMD"></asp:TableCell> <asp:TableCell Text="終了日" ID="cellLeaseEndYMD"></asp:TableCell> </asp:TableRow> </asp:table> 【VB.NET】(行を追加する部分)--------------------------------------- Dim DSet As KeiyakuData ' 契約データを保持するオブジェクト Dim TCell As New TableCell ' セルを作成 Dim TRow As New TableRow ' 行を作成 Dim DSetRowCount As Integer ' 取ってきたデータの件数 DSet = GetKeiyakuData() ' 契約データを取得 DSetRowCount = DSet.Tables(DSet.KEIYAKU_TABLE).Rows.Count Dim rgBtn(DSetRowCount) As RadioButton ' 取得した行数分ラジオボタンを作成 ' 取ってきた行分繰り返す For i = 0 To DSetRowCount - 1 ' 新しい行を作成 TRow = New TableRow With DSet.Tables(DSet.KEIYAKU_TABLE).Rows(i) ' セルを5個作成 For j = 0 To 5 TCell = New TableCell TRow.Cells.Add(TCell) ' 行にセルを追加 Next tblFindResult.Rows.Add(TRow) ' 行を結果を表示するテーブルに追加 rgBtn(i) = New RadioButton ' ラジオボタンを生成 rgBtn(i).GroupName = "rbResultSelect" ' ラジオボタンにグループ名を設定 rgBtn(i).ID = "rb" & .Item(DSet.KEIYAKUNO).ToString() ' ラジオボタンのIDを設定 ' 各セルに値を代入 tblFindResult.Rows(i + 1).Cells(0).Controls.Add(rgBtn(i)) tblFindResult.Rows(i + 1).Cells(1).Text = .Item(DSet.KEIYAKUNO).ToString() tblFindResult.Rows(i + 1).Cells(2).Text = .Item(DSet.KEIYAKUNAME).ToString() tblFindResult.Rows(i + 1).Cells(3).Text = .Item(DSet.KEIYAKUBEGINYMD).ToString() tblFindResult.Rows(i + 1).Cells(4).Text = .Item(DSet.KEIYAKUENDYMD).ToString() End With Next i If 0 < DSetRowCount Then ' 検索結果がある場合 lbFindResult.Text = DSetRowCount.ToString() & "件見つかりました" tblFindResult.Visible = True rgBtn(0).Checked = True Else ' 検索結果が無い場合 lbFindResult.Text = "見つかりませんでした。" tblFindResult.Visible = False End If 長文失礼しました。 |
|
投稿日時: 2004-06-25 11:16
tblFindResult_Initイベント内でコーディングすれば良いと思います。
それにしてもなんだか面倒そうですね。GUIが変わっても良いのであれば、DataGridで[選択]ボタンを付けた方が手軽かつ便利だと思いますけど。 |
|
投稿日時: 2004-06-25 11:25
>動的に作成したラジオボタン
もしかしてPage.Loadで作成していますか? 動的コントロールの追加はPage.Initで行うべきでしょう。 > DBから持ってきたデータを Table に表示しラジオボタンを > 配置、編集したい行をラジオボタンで選択させて DataGridでやるのが一般的でしょう。 |
|
投稿日時: 2004-06-25 13:50
まるくさん、todoさんすばやい返答ありがとうございます。
すみませんがもう一度処理の概要を説明させてください。 検索ページ { Page_Load { 処理なし } 検索ボタン_クリック { ' ここが先ほど書き込みした部分です DBから該当するデータを取得 取得したデータをテーブルに追加 編集ボタン.visible = True テーブル.visible = True } 編集ボタン_クリック { ラジオボタンの選択項目の取得 ' ここで詰まっています 取得したものをセッションに格納 編集画面に遷移 } } どうにか ViewState に値を保持することが出来たので この値を取得しようと思っています。 貴重なご意見ありがとうございました。 進境が変わり次第報告いたします。 |
|
投稿日時: 2004-06-28 18:44
お世話になっております。
ViewState の値を取得することができ、 無事解決することができました。 結局自己解決になってしまいました。 みなさんありがとうございました。 |
1