- PR -

ASP.NETで2列にCheckBox

投稿者投稿内容
Yakisoba
ベテラン
会議室デビュー日: 2006/05/12
投稿数: 62
お住まい・勤務地: 渋谷苦
投稿日時: 2006-05-26 17:06
こんばんは。いつもお世話になっております。

開発環境は、
VS.NET2003
.NET Framework1.1
ASP.NET1.1
です。

今回の質問の内容ですが、DataGrid内に2列のチェックボックス列を作りまして、
行単位で、片方のチェックボックスがチェックされたら
もう片方の列のチェックボックスのチェックを外す、という仕様にしたいのです。

│────────────────────〜
│CheckBox列1 │ CheckBox列2 │  
│────────────────────〜
│■←Check=True│□←Check=False│
│────────────────────〜
│□←Check=False│■←Check=True│
│────────────────────〜

2行目のCheckBox列1のチェックを付けた場合

           ↓

│────────────────────〜
│CheckBox列1 │ CheckBox列2 │  
│────────────────────〜
│■←Check=True│□←Check=False│
│────────────────────〜
│■←Check=True│□←Check=False│
│────────────────────〜

瞬時に下行のCheckBox列2のチェックが消える


列ごとのチェックされた場所の取得は出来ました。

Dim Chk As CheckBox 'チェックボックス
Dim Row As DataGridItem 'DataGridItem
Dim Cname, Str1, Str2 As String 'ContorolName

For Each Row In dgCList.Items
Chk = CType(Row.FindControl("CheckBox1"), CheckBox)
Cname = Chk.UniqueID
If Request.Form(Cname) <> "" Then
Chk.Checked = True
End If
Next

ただ、データグリッド上というのもあって、チェックされた瞬間というのを
取得できるのかが分かりません。
ポストバックを走らせれば、片方のチェックが入っていた時に、
もう片方のチェックをFalseにしてやるということは出来そうですが、
ポストバックを走らせない(?)で、同じ行の両列のチェックを入れようとした際に、
もともとチェックが入っていたほうのチェックボックスのチェックを
外すというやり方は出来るのでしょうか?

チェックチェックと読みづらくてすいません。

教えていただけると助かります。
宜しくお願い致します。

vincent
大ベテラン
会議室デビュー日: 2004/07/09
投稿数: 142
投稿日時: 2006-05-26 17:10
ポストバックなしでやるなら、クライアントサイド(JavaScript)で
書くしかないと思います。
Yakisoba
ベテラン
会議室デビュー日: 2006/05/12
投稿数: 62
お住まい・勤務地: 渋谷苦
投稿日時: 2006-05-26 17:58
引用:

vincentさんの書き込み (2006-05-26 17:10) より:
ポストバックなしでやるなら、クライアントサイド(JavaScript)で
書くしかないと思います。



早いご返答ありがとうございます。
JavaScriptを記述するとすれば、ASP.NETの場合どこに書けばよろしいのでしょうか?
aspxファイルのHTMLに記述する形になるのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-26 18:09
引用:

Yakisobaさんの書き込み (2006-05-26 17:58) より:

JavaScriptを記述するとすれば、ASP.NETの場合どこに書けばよろしいのでしょうか?
aspxファイルのHTMLに記述する形になるのでしょうか?


でも良いでしょうし、.js ファイルとして分離しても良いでしょうし、
Attribute に直接書いてしまっても良いでしょうし(ry

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Yakisoba
ベテラン
会議室デビュー日: 2006/05/12
投稿数: 62
お住まい・勤務地: 渋谷苦
投稿日時: 2006-05-26 18:31
ご返答ありがとうございます。

早速JavaScriptでの記述方法を調べたのですが、
(なにぶんJavaScriptの経験がほぼ無いもので・・・)
ポストバックを走らせることなく、”チェックされたorチェック外された”
のイベントを取得することは可能なのでしょうか?

ASP.NETだとCheckedChangedイベントがありましたが・・・
データグリッド上だと、動的にCheckBoxが生成されるため
名前の取得も必要なのでしょうか。

質問ばかりで申し訳ないです。

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-05-26 23:29
引用:
(なにぶんJavaScriptの経験がほぼ無いもので・・・)

まず、datagridじゃない普通のチェックボックス2こおいて練習してみる、とか。

引用:
ポストバックを走らせることなく、”チェックされたorチェック外された”
のイベントを取得することは可能なのでしょうか?

可能です。クライアントで動くのでサーバープログラムとはまったく考え方が違いますが。
onclickonchangeあたりですかね。

引用:
データグリッド上だと、動的にCheckBoxが生成されるため
名前の取得も必要なのでしょうか。

その通り、です。
出力HTMLのソースみて生成されたチェックボックスのIDの規則性を見てみるといいです。

AttributesプロパティとかItemCreatedイベントがカギになるかな。

# って、ラジオボタンにするわけにはいかないのですか?
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-05-27 06:49
以下のサンプルが参考になるかと・・・

サーバー側で処理(Ajax対応):
http://akiokasai.qsh.eu/Goto.aspx?id=060527-1

クライアント側で処理:
http://akiokasai.qsh.eu/Goto.aspx?id=060527-4

GridViewを使用していますがDataGridも可能です。
Web Serverのレスポンスが遅いのでCheckBoxをクリックしてからGridViewが
表示されるまで2-3秒かかります。

_________________
ASP.NET+Ajaxサンプル集

[ メッセージ編集済み 編集者: Access 編集日時 2006-05-27 16:45 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-05-27 19:09
NAL-6295です。こんばんは。

引用:

今回の質問の内容ですが、DataGrid内に2列のチェックボックス列を作りまして、
行単位で、片方のチェックボックスがチェックされたら
もう片方の列のチェックボックスのチェックを外す、という仕様にしたいのです。




RadioButtonのGroupNameプロパティを利用すれば、何も難しいことをしなくても、
実現できる仕様だと思うのですが、チェックボックスじゃないといけない事情でも
あるのでしょうか?

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