- - PR -
ASP.NET チェックボックスの処理
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-05-08 11:51
宜しくお願いします。
現在、ASP.NET WEBアプリケーションでの作成をしています。 SQL SERVERと接続して更新処理などさせているのですが、 チェックボックスの部分で希望の処理ができないのでご助言お願いします。 チェックボックスがフォーム内に4つあります。 (SQL SERVERのデータと接続しています。) 仮にチェックボックス名を「あ」「1」「2」「3」とすると、 「1」でチェックをつけた場合に「あ」にも自動的にチェックが入る様にしたいのです。 「2」「3」にチェックが入った場合は、「あ」にはチェックがつかない。 データベースの関係上、ラジオボタンは使用できません。 どの箇所にどの様なコードを記入すれば、 希望する動作になるかご助言お願い致します。 | ||||||||
|
投稿日時: 2008-05-08 12:16
サーバ側で処理したいですか??
それともクライアント側で処理したいですか?? それによって、答えもかわってきます。 >データベースの関係上、ラジオボタンは使用できません。 興味本位ですが、ここだけわかりません。 もう少し詳しく説明願えないでしょうか?? 完全な排他処理ではないので、どちらにせよラジオボタンじゃ厳しい気がしますが。 | ||||||||
|
投稿日時: 2008-05-08 12:34
各ボックスのAutoPostBackをTrueにすれば、チェック操作の度にCheckedChangedイベントが
走るので、簡単ではありますけど操作性は著しく損なわれます。これと同等のことをクライアント側でやるとしたら。。。
| ||||||||
|
投稿日時: 2008-05-08 14:42
pt様、RapidExpress様 ありがとうございます。
pt様 クライアント側で行いたいです。 >興味本位ですが、ここだけわかりません。 申し訳ありません。 ただ、データベースのテーブル構成が各フィールド事に bit型で作成されているもので、 チェックボックスしか使用できないのかなと思いまして・・・。 RapidExpress様 コードありがとうございます。 とても参考になりました。 一度試してみて、再度ご報告致します。 | ||||||||
|
投稿日時: 2008-05-08 15:49
先程、RapidExpress様から頂いたコードを試してみたのですが、
クライアント側では、 「名前'CheckBox1'は宣言されていません。」とエラーが出てしまい(4つとも)、 サーバ側では、 「Handles CheckBox1.Load, CheckBox2.Load, CheckBox3.Load, CheckBox4.Load」の 部分に波線が出てエラーになりました。 IDが「CheckBox1」から「CheckBox4」とそのままのIDなので、 [ClientID]の部分を変えてみたのですが、エラーがでます。 入力方法や入力場所が間違っていると思うのですが、どこが間違いか教えて下さい。 入力場所:チェックボックスが置いてあるフォームのソース 入力内容: クライアント側 <script type="text/javascript"> function Change() { var chk1 = document.getElementById('<%= CheckBox1.CheckBox1 %>'); var chk2 = document.getElementById('<%= CheckBox2.CheckBox2 %>'); var chk3 = document.getElementById('<%= CheckBox3.CheckBox3 %>'); var chk4 = document.getElementById('<%= CheckBox4.CheckBox4 %>'); if (chk2.checked) { // 2番目のチェックボックスがオンなら1番目もオンにする chk1.checked = true; } } </script> サーバ側 Protected Sub CheckBox1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles CheckBox1.Load, CheckBox2.Load, CheckBox3.Load, CheckBox4.Load Dim ctrl As CheckBox = CType(sender, CheckBox) ctrl.Attributes.Add("onclick", "Change();") End Sub 宜しくお願い致します。 | ||||||||
|
投稿日時: 2008-05-08 16:46
説明不足で申し訳ありません。ちょっと書き換えました。
{ボックス1}〜{ボックス4}のところを、実際に使用されている チェックボックスのIDに差し替えてください。 (クライアント側、サーバ側それぞれ4か所ずつ)
そちらで起こったエラーについてですが、まずクライアント側。 "ClientID"のところを変更してはいけません。これは各ボックスをクライアント上で 識別するためのIDをサーバ側より取得しています。(<%= 〜〜〜 %> の部分) なお、すべてのサーバコントロールはこのClientIDというプロパティを持っています。 次にサーバ側。 "CheckBox_Load"は、各チェックボックスがロードされたときに実行され、 自身がクリックされたときにスクリプト(Change)が走るよう登録します。 そして、どのチェックボックスがロードされたときにこの登録を行うのかというのを "Handles"以降で指定しています。なので、Handles以降に関しても、実際使用 されているコントロールのIDに変更してやらなければなりません。 | ||||||||
|
投稿日時: 2008-05-12 06:45
RapidExpress様
丁寧なご指導ありがとうございます。 コンピュータが動かなくなり、再インストールして時間がかかってしまいました。 ご指導通りに、IDを差し替えたのですが、 先程記載したエラー(「宣言されていない」というエラー)が出てしまいます。 後付で大変申し訳ないのですが、チェックボックスがGridView内にあることが、 何かエラーの原因なのでしょうか? 各IDは「CheckBox1」〜「CheckBox4」というIDになっています。 (「Item」や「Edit」で表記されているIDです。) それとも、コードを記入する場所が違うのでしょうか? クライアント側コードはチェックボックスがあるフォームのソース部分に、 サーバ側コードはチェックボックスがあるフォームのVBに、 それぞれ記入しています。 GridView内にあるチェックボックスは希望する動きはできないのでしょうか? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-05-12 10:17
こんにちわ。
コードの記述場所については問題ありません。
その通りです。GridViewの中にあるコントロールを直接参照することはできません。 私が示したコードを適用できるのは、ページ直下にあるコントロールだけになります。 各列に4つずつボックスがあるのだとすれば、こんな感じになると思います。
デザイナでは「CheckBox1」などと指定していても、どの4つを1つのグループとみなすのか、 IDは全て指定してやらねばなりません。そしてそれは列ごとに行う必要があります。 (うまく説明できなくてすみません。。。) _________________ //--- あやのこうじ@RapidExpress |
1|2|3
次のページへ»