GridViewからチェックボックスでデータを選択・送信する方法

このQ&Aのポイント
  • GridViewを使用してチェックボックスでデータを選択し、次のページに送信する方法について、解説します。
  • VisualWebDeveloper2005を使用して、セミナーの申し込みページを作成しています。コース一覧(GridView)からチェックボックスで選択したコースのデータを取得し、次のページで表示するためのプログラムを作成したいと考えています。
  • 現在、チェックボックスがオンになっている行のデータ(コースID)を取得して、次のページに送信する方法について調査していますが、正しい方法が見つかっていません。複数の項目を選択しても、1つのデータしか送信されない状況です。解決策についてアドバイスをいただけると助かります。
回答を見る
  • ベストアンサー

GridViewからチェックボックスでデータを選択し、次のページへ送信する動作について

現在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日ほどどうすればいいかを検索してみたのですが、良い答えが見つからなかったので質問させていただきます。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#259269
noname#259269
回答No.1

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

teltel007
質問者

お礼

回答していただきありがとうございます。 今回の質問で使っているソースは他の解説ページから少しずつコピーして使っていたので、正直意味がわかっていない部分があったのですが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 このようなコードにしたところ、エラーはでなくなりました。(次のページで正常に受け取れるかはまだ確認していません) ありがとうございました!

teltel007
質問者

補足

本日試してみたところ、データの受け渡しが正常にできるのを確認しました。 その受け取ったデータをテキストボックス等に表示させるのは成功したのですが、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文の内容が間違っていないことは確認済みなのですが、何がいけないのでしょうか?

関連するQ&A

  • GridView1の選択の指定とダミーデータの追加について

    GridView1とTwxtBox1を用意し GridView1に選択ボタンをつけ押すと、TextBox1にその行の1行目を表示するようにしたいのですが ★に何を入れたら、選択行を指定することができるのでしょうか?教えてください。 Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) TextBox1.Text = GridView1.Rows.Item(★).Cells(1).Text End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim conStr As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString Dim strSQL As String strSQL = "SELECT 1CELL FROM tableA" Using con As New SqlConnection(conStr) Using cmd As NEw SqlCommand(strSQL, con) Dim dr As SqlDataReader con.Open() dr = cmd.ExecuteReader(Data.CommandBehavior.CloseConnection) GridView1.DataSource = dr GridView1.DataBind() dr.Close() End Using End Using End Sub また、GridView1に出ているデータに選択するデータがない場合の為に データーベースにはなくても【-】というデータを常に表示できるようにしたいのですが どのようにしたらいいのでしょうか? 【tableAの1CELL】 AAAAA BBBBB CCCCC DDDDD - ←データベースにはこのデータはないけれどGridView1には常に表示し、これを選択するとTextBox1に【-】が入るようにしたいのですが よろしくお願いします。

  • チェックボックスのデータ受け渡し

    アンケートフォームを作成しています。 アンケートの中で、チェックボックスを利用して業種を選んでもらう項目を作ろうと思うのですが、取得したデータの確認表示が上手くいかなくて困っています。 フォームの流れとしては 入力画面→確認画面→送信完了画面 と言う流れになります。 入力画面で下記のようなフォームを作ったのですが、確認画面で表示させる方法を教えていただきたいと思います。 <form name="form1" method="post" action="input.php"> <input name='check[] 'type='checkbox' id='check'value='飲食業'> 飲食業 <input name='check[] 'type='checkbox' id='check' value='小売業'> 小売業 <input name='check[] 'type='checkbox' id='check' value='サービス業'> サービス業 <input name='check[] 'type='checkbox' id='check' value='建築・不動産業'> 建築・不動産業 <input name='check[] 'type='checkbox' id='check' value='コンサルティング業'> コンサルティング業 <input name='check[] 'type='checkbox' id='check' value='その他'> その他 </form> 業種選択の他にも名前や会社名などの項目もあり、それらはセッションを利用し確認画面へ受け渡しています。 この業種選択の項目も、その他の項目と同じようにセッションを利用し、確認画面へ受け渡すことは可能でしょうか? 『飲食業、小売業、その他』のように、チェックしたもの全てを確認表示するような形にしたいのですが・・・ 宜しくお願いします

    • ベストアンサー
    • PHP
  • チェックボックスの値を(1,0)のようにすべて送信する方法

    formをsubmitすると、チェックボックスの値は、 チェックされた項目のvalue値が配列の形で送信されますよね。 たとえば、 <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="111" CHECKED> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="222" CHECKED> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="333" CHECKED> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="444"> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="555" CHECKED> だと、 [111,222,333,555] のように。 今回は、表形式でデータを表示し、 チェックされた行の、他の列の値(フィールド)も取得したいのです。 他の列のフィールドは、チェックされていない行でも入力されている可能性があります。 そうすると、そのフィールドの値も配列にして送ってしまうと、 チェックボックスの値と数が合わなくなり、横方向での関連付けが出来なくなってしまいます。 なので、チェックボックスの送信値を、配列の要素数は全件で、 チェックされたかされていないかということが分かるように することは不可能でしょうか? JavaScriptは規約により、使うことが出来ない状況で困っています(><) 何か案があれば教えてください。

    • ベストアンサー
    • HTML
  • vaSpreadのチェックボックスとコマンドボタンについて

    VBの初心者です。よろしくお願いします。 VB6.0&vaSpread3.0を使用しています。 Spreadの同一行にコマンドボタンとチェックボックスを配置しています。 コマンドボタンをクリックすると1行削除するようにしたいと思っています。 ButtonClickedにて1行削除できるよう、記載したのですが、 チェックボックスをクリックしてもButtonClickedが反応し、1行削除されてしまいます。 コマンドボタンとチェックボックスを使い分けたい場合、どのように記載したらよろしいでしょうか? 下記にコードを記載します。 Private Sub vaSpread1_ButtonClicked(ByVal Col As Long, ByVal Row As Long, ByVal ButtonDown As Integer) With vaSpread1 .Row = Row .Row2 = Row .BlockMode = True .Action = ActionDeleteRow .BlockMode = False .MaxRows = .MaxRows - 2 End With End Sub よろしくお願いいたします。

  • .NETのGridViewでテストデータの投入方法

    Microsoft Visual Studio 2008を使用しています。 ASP.NETのGridViewで、データソースを使用せずにテストデータを投入する方法を教えて下さい。 情けないくらいの初心者です。どうか助けてください。 表示だけを確認して画面整形したいので、データ部に『12345』などのテストデータを投入して表示させたいのですが、そのやり方が分かりません。 GridView自体の設置と、列の追加までは出来ています。が、肝心のデータを入れられないためにプレビューしても真っ白になってしまいます。 検索して調べた結果、ダミーのデータテーブルを作成してバインドする方法があったのですが、それをどこに書けばいいのか、また、関数名??をどうしたらいいのかが分かりません。 失礼ながら拾ったソースをそのまま拝借すると… DataTable table = new DataTable(); table.Columns.Add("data1"); table.Columns.Add("data2"); DataRow row1= table.NewRow(); row1["data1"] = "value1-1"; row1["data2"] = "value1-2"; table.Rows.Add(row1); DataRow row2 = table.NewRow(); row2["data1"] = "value2-1"; row2["data2"] = "value2-2"; table.Rows.Add(row2); GridView1.DataSource = table; GridView1.DataBind(); これを、vbの方に記述すればいいのでしょうか? また、function名といいますか、sub名?をどうしたらいいのかがわかりません。。 デザイン画面上でダブルクリックして自動生成されるソースだと Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged End Sub になるので、ちょっと違う気がします・・。 上の拝借したソースよりも、もう少し分かりやすく記述していただけると大変嬉しいです・・。 本当に本当に初心者で申し訳ありません!!! とても困っているので、どうか助けてください、宜しくお願い致します!

  • GridView でコンボボックスの設定

    再質問をさせていただきます。 gridviewを作成しました。 -------------------------------------------------------------------------------- <asp:GridView ID="grdList" runat="server" DataSourceID="sqldsList"> <Columns> <asp:BoundField DataField="ITEMNO" HeaderText="ITEMNO"></asp:BoundField> <asp:TextBox ID="txtNAME" runat="server" Text='<%# Bind("ITEM_NAME") %>'></asp:TextBox> <ItemTemplate>   <asp:DropDownList CssClass="cnbstr" ID="cnb_KBN" runat="server"     DataSourceID="sqldscnb1" DataTextField="NAME" DataValueField="NO" AutoPostBack="True"></asp:DropDownList> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> -------------------------------------------------------------------------------- このコンボボックスに値を設定させたいのですが、ITEMNO="01"の時だけ、txtNAMEの値を初期表示したいと思っています。 RowDataBound、RowCreatedで可能かと思ったのですができずに困っています。 どなたかご教授お願いします。 Protected Sub grdList_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdList.RowDataBound   If e.Row.RowType = DataControlRowType.DataRow Then     IF DataBinder.Eval(e.Row.DataItem, "ITEMNO").ToString() = "01" THEN       Dim dlist As DropDownList = DirectCast(e.Row.FindControl("cnb_KBN"), DropDownList)       dlist.SelectedValue = "ITEM_NAME" ←こんな感じのことをしたい     ELSE       設定しない     END IF   End If End Sub

  • 複数選択した場合のチェックボックスの受け渡しについて!

    こんばんわっ! 度々質問させていただいてます。 今回、Mysqlより日記のデータの抽出を行いました。 書いたり更新したり削除したりと言う日記です。 書いたり更新したりは無事出来ました。問題は削除です。 セレクトフォーム形式の場合削除できました。 しかしセレクトフォーム形式の場合一個づつの削除になります。 これじゃあんまりだなぁ・・・と思い。 非常に悩みました。 チェックボックス形式にしようと思いましたっ! 抽出結果に↓をループしました。 <input name="checkbox[]" type="checkbox" value="<?=$id?>" /> 表示結果は↓です。 □太郎さんの5月1日の日記 タイトル;ホニャララ □太郎さんの5月2日の日記 タイトル;ホニャララ チェックした日記を削除する。 の様になります。(□はチェックボックスです) 値の受け渡しはこちらです↓ $result =$_POST['checkbox']; foreach($result as $id) 今回チェックボックス形式の削除は初めてです。 チェックボックスにあるname=checkbox[] と vulue の理解できてません(*∩_∩*) 一つの項目は受け渡せました。 しかし複数チェックを行っていても複数の値を受け渡す事出来ません。 vulue= に問題ありますか! 又は値を受け取る $result =$_POST['checkbox'];  foreach($result as $id) にもんだいありますかっ!

    • ベストアンサー
    • PHP
  • チェックボックスでの送信

    チェックボックスにチェックを入れて送信したときは1を チェックを入れずに送信したときは0をPHP側で受けたいのですが チェックを入れずに送信するとPHP側で$_POST['flg']を取得できないため、エラーになります。 方法はないでしょうか? <form action="test.php" method="post"> フラグ:<input type="checkbox" name="flg" value="1" /> </form> === test.php =========== <?php $flg = $_POST['flg']; print($flg); ?>

    • ベストアンサー
    • PHP
  • チェックボックスをチェックする

    <input id="checkbox1" type="checkbox">AAA というチェックボックスがあります。これをチェックして、チェックした状態にHTMLを書き換えたいのですが、JavaScriptでできますか?

  • 動的に作ったチェックボックスが選択できません!!

    こんにちは 閲覧ありがとうございます。 タイトルの通り、HTMLのcheckboxをjQuery/javascriptで動的に作ったのですが、動かなくて困っています。 単純に一つ一つcreateElement()で作った場合は大丈夫なのですが、作りたいものが入れ子になった状態です。 まず、作りたいものをHTMLで書くと以下になります。 <div class="input-checkbox"> <span class="kintoneplugin-input-checkbox-item"> <input type="checkbox" name="checkbox" value="value*****" id="id*****"> <label for="id*****">チェックボックス1</label> </span> </div> そして、次にこの形を動的に作ろうとしたものが以下です。 上のHTMLの<div class="input-checkbox">はあるという前提で、その子に動的に作った要素を入れようとしています。 arrayとあるのは、この内容をfor文で回すためです。 //1.span要素作成 var checkSpan = document.createElement('span'); checkSpan.className = "input-checkbox-item"; //2.checkbox作成 var viewCheckBox = document.createElement('input'); viewCheckBox.type = "checkbox"; viewCheckBox.name = "checkbox"; viewCheckBox.id = array2[k]; viewCheckBox.value = array2[k]; viewCheckBox.disabled=""; //3.ラベル作成 var viewLabel = document.createElement("label"); viewLabel.for = array2[k]; viewLabel.id = "label_"+k; viewLabel.innerHTML = array[k]; 4.//追加 $('.input-checkbox').append($(checkSpan).append(viewCheckBox).append(viewLabel)); 上記の内容で実行すると、チェックボックスとそのラベルは表示されるのですが、チェックボックスが編集不可というか、、チェックできないのです。 disabledの指定などもしてみたのですが、うまくいきませんでした。 どうやったらチェックをできるようになるでしょうか>< プログラミング初心者なので、変なところとかがあったらすいません。。。 よろしくお願いします!!

専門家に質問してみよう