アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在VisualWebDeveloper2005にて、セミナーの申し込みページを作成しています。
動作は、コース一覧(GridView)からチェックボックスで受けたいコースを選択し、GridViewの下にある[申し込む]ボタンを押すとGridViewからチェックがついている行のデータ(コースID)を取得し、次ページに送信→次ページでそのIDをもとにGridViewで詳細情報を表示する確認ページを作成したいと思っています。
GridViewの中にチェックボックスを作成し、チェックボックスがオンになっているもののみ、という部分まではプログラムが完成しているのですが、取得したデータを送信→次ページで受け取り表示の部分がわからずに困っています。

チェックした行のデータをSessionに入れようと考えたのですが

'チェックボックスがオンになっている時、その行のIDを取得してテキストボックスに表示
Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs)
For Each row As GridViewRow In GridView1.Rows
Dim cb As CheckBox = CType(row.FindControl("cbSelect"), CheckBox)
If cb.Checked Then
Session("test") = row.Cells(1).Text
Response.Redirect("kakunin.aspx")
End If
Next
End Sub

このプログラムだと複数の項目をチェックしても1つしかデータが送信されないのでどうすればいいかわからない状態です。
3日ほどどうすればいいかを検索してみたのですが、良い答えが見つからなかったので質問させていただきます。よろしくお願いします。

A 回答 (1件)

検索してもでてこないでしょう。


仕組みを考えて対応してください。

GridView1.Rows は、GridView1 のすべての行を返します。つまり、For ~ Next ループは 行数分繰り返されるわけですから、cb.Checked を判断したら、配列やリストなどに row.Cells(1).Text の値を貯めていって、ループが終わってから、セッション変数に格納します。

この回答への補足

本日試してみたところ、データの受け渡しが正常にできるのを確認しました。
その受け取ったデータをテキストボックス等に表示させるのは成功したのですが、SqlDataSourceのWHERE句の条件にしようとすると、うまくいきません。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

Dim kaisuu As New Integer
Dim sqlcommand As String = ""
Dim i As New Integer
Dim a As String = ""

kaisuu = Session("kaisuu") - 1

a = "([courceID] =" & Session("sessID")(i)
For i = 0 To kaisuu - 1
a = a & " or " & Session("sessID")(i)
Next
a = a & " or " & Session("SessID")(i) & ")"
sqlcommand = a

TextBox1.Text = Session("sqlcommand")
TextBox2.Text = kaisuu
End Sub

このように、WHERE句で、取得したデータの件数分 ○○ or ○○ と条件をつけるようにして、この「sqlcommand」をWHERE条件の部分に入れているのですが、FormViewで確認しても何も出てこないのです。

>>TextBox1.Text = Session("sqlcommand")
この部分でWHERE文の内容が間違っていないことは確認済みなのですが、何がいけないのでしょうか?

補足日時:2009/02/19 15:24
    • good
    • 0
この回答へのお礼

回答していただきありがとうございます。

今回の質問で使っているソースは他の解説ページから少しずつコピーして使っていたので、正直意味がわかっていない部分があったのですがedp3142様のおかげでようやく理解することができました。

Dim sessionid() As String
'チェックボックスがオンになっている時、その行のIDを取得してテキストボックスに表示
Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim i As New Integer
i = 0
For Each row As GridViewRow In GridView1.Rows
Dim cb As CheckBox = CType(row.FindControl("cbSelect"), CheckBox)
If cb.Checked Then
ReDim Preserve sessionid(i)
sessionid(i) = row.Cells(1).Text
i = i + 1
End If
Next
Session("sessID") = sessionid
Session("kaisuu") = i
Response.Redirect("kakunin.aspx")
End Sub

このようなコードにしたところ、エラーはでなくなりました。(次のページで正常に受け取れるかはまだ確認していません)
ありがとうございました!

お礼日時:2009/02/18 17:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A