- PR -

[ASP.NET] 動的に作成したラジオボタンの選択項目の取得

1
投稿者投稿内容
kunar
会議室デビュー日: 2004/06/24
投稿数: 4
投稿日時: 2004-06-24 20:59
はじめまして。 kunar というものです。

現在 ASP.NET(VB.NET)でWebアプリケーションの開発を行っております。

DBから持ってきたデータを Table に表示しラジオボタンを
配置、編集したい行をラジオボタンで選択させて
編集するページに遷移させたいと考えております。

遷移する際にラジオボタンの選択項目を取得する必要が
あるのですが、ボタンを押下するとページが再読み込みして
動的に作成した行が消えてしまいます。

すると NullReferenceException が発生して選択項目が取得
できなくなってしまいます。

visible で制御しようとしたのですがデータの件数が1000件
程あって現実的でないので断念しました。

どなたか解決策をお持ちでしたら是非ご教授してもらえませ
んでしょうか?

よろしくお願いします。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2004-06-25 01:13
具体的にどうなのかが文脈からよく判らないのですが、そもそもTableとは何を指していますか?

・Response.WriteでTableタグを吐いている?
・Tableコントロール?
・DataGrid?
kunar
会議室デビュー日: 2004/06/24
投稿数: 4
投稿日時: 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/01/09
投稿数: 181
投稿日時: 2004-06-25 11:16
tblFindResult_Initイベント内でコーディングすれば良いと思います。

それにしてもなんだか面倒そうですね。GUIが変わっても良いのであれば、DataGridで[選択]ボタンを付けた方が手軽かつ便利だと思いますけど。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-06-25 11:25
>動的に作成したラジオボタン
もしかしてPage.Loadで作成していますか?
動的コントロールの追加はPage.Initで行うべきでしょう。

> DBから持ってきたデータを Table に表示しラジオボタンを
> 配置、編集したい行をラジオボタンで選択させて

DataGridでやるのが一般的でしょう。
kunar
会議室デビュー日: 2004/06/24
投稿数: 4
投稿日時: 2004-06-25 13:50
まるくさん、todoさんすばやい返答ありがとうございます。

すみませんがもう一度処理の概要を説明させてください。

検索ページ {
    Page_Load {
        処理なし
    }
    検索ボタン_クリック {
        ' ここが先ほど書き込みした部分です
        DBから該当するデータを取得
        取得したデータをテーブルに追加
        編集ボタン.visible = True
        テーブル.visible = True
    }
    編集ボタン_クリック {
        ラジオボタンの選択項目の取得 ' ここで詰まっています
        取得したものをセッションに格納
        編集画面に遷移
    }
}

どうにか ViewState に値を保持することが出来たので
この値を取得しようと思っています。

貴重なご意見ありがとうございました。

進境が変わり次第報告いたします。
kunar
会議室デビュー日: 2004/06/24
投稿数: 4
投稿日時: 2004-06-28 18:44
お世話になっております。

ViewState の値を取得することができ、
無事解決することができました。

結局自己解決になってしまいました。

みなさんありがとうございました。
1

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