- - PR -
Datagrid内のチェックボックスの状態の取得ができない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-06-10 17:23
皆さんはじめまして。
よろしくお願いします。 VB.NET VisualStudio.NETでWEBアプリケーションを開発しています。 件名の通り、Datagrid内にテンプレートを配置し、そのItemTemplate内にCheckBoxを 配置しました。 チェックボックスの値はDatagrid外に配置したボタンのクリックで取得します。 件名:(WEBアプリ)DataGridの複数選択行の内容を次のページに受渡し 件名:Datagrid内のチェックボックスについて を参考にして、ボタンのクリックイベントのsub内(メソッド?)に以下のコードを 記述して状態の確認をしていますが、チェックボックスの値をきちんと取得できません。 このコードのボタンはチェックボックスがチェックされていれば、チェックを 外す処理を行います。 コード---------------------------------------- '*********************************************** '* チェック項目クリア '*********************************************** Private Sub B_Clear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Clear.Click Dim myDataGridItem As DataGridItem Dim DmyChkbox As CheckBox For Each myDataGridItem In DataGrid1.Items DmyChkbox = myDataGridItem.FindControl("CheckBox1") If DmyChkbox.Checked Then DmyChkbox.Checked = False 'debug用 Me.ErrMsg.Text = "find" End If Next End Sub コード---------------------------------------- DEBUG用にテキストボックスを配置して、ボタンをクリックするとチェックがONになっている 場合そこに"find"とメッセージをはかせるようにしていますが、チェックしてあっても一度も 出力されません。 checkbox1のデフォルト値が"false"となっていて、全てデフォルトのまま判断されている様な 印象を受けました。 どなたか原因が分かる方がいらっしゃいましたら、アドバイスお願いします。 [ メッセージ編集済み 編集者: bibiru 編集日時 2004-06-10 17:24 ] | ||||
|
投稿日時: 2004-06-10 17:52
VS.NETの便利な機能を使いましょう。 http://www.atmarkit.co.jp/fdotnet/aspandvs/aspandvs06/aspandvs06_02.html | ||||
|
投稿日時: 2004-06-10 18:28
早速のアドバイスありがとうございます。
デバッグ方法を見て For Each myDataGridItem In DataGrid1.Items のところにブレークポイントを設定してみましたが、ぜんぜん止まりません。 このエディタは色々と使い方が難しいですね。 教えていただいたページをよく読んで色々試してみたいと思います。 | ||||
|
投稿日時: 2004-06-11 09:56
こんにちは、はじめて投稿します。ちょうど今、同じことをしようとしていました。
DataGrid内のCheckBoxの状態はRequestから取得しないといけないようです。 Dim Cb As CheckBox Dim Row As DataGridItem Dim Cname, Str1, Str2 As String For Each Row In DataGrid1.Items Cb = CType(Row.FindControl("CheckBox1"), CheckBox) Cname = Cb.UniqueID If Request.Form(Cname) <> "" Then Str1 = Row.Cells(1).Text Str2 = Row.Cells(3).Text ListBox1.Items.Add(Str1 & " " & Str2) Cb.Checked = True End If Next これで思い通りにうごきました。 Cb.Checked = True を書いておかないと、ポストバックした後の画面で チェックがはずれてしまいます。 これで正解かどうか、自信はないのですが…。 | ||||
|
投稿日時: 2004-06-11 11:28
todo様
件名:ASP.NETのデバッグができない。 を参考にして、 ・プロジェクトプロパティ ASP.NETデバッグをON デバッグに必ずIEを使用するをON ・IISのプロパティ スクリプトのデバッグをON にしたところ、きちんとデバッグできるようになりました。 why_i様 ずばりこのままのソースで期待した動作を確認出来ました。 ボタンをクリックすると必ずページの更新(?)が掛かり、チェックボックスの値は デフォルト値になってしまうと言う事だったのですね。 大変助かりました。 ありがとうございました。 | ||||
|
投稿日時: 2004-06-11 14:37
チェックボックスの値がリセットされるのは、B_Clear_Clickイベントの前で、再度DataBindしているからではありませんか? ViewStateをOFFにしていなければ、最初に掲示されたソースで動くと思います。 いろいろな過去ログを参照すると、処理の順番など勉強になると思います(私もそれでずいぶん勉強させて頂きました)。 | ||||
|
投稿日時: 2004-06-12 10:53
まるく様
> B_Clear_Clickイベントの前で、再度DataBindしているからではありませんか? についてですが、ボタンをクリックした瞬間に「B_Clear_Clickイベント」が発生 ハンドルされたメソッドが処理されると認識しております。 その前にdatabindするような記述はしているつもりは無いのですが・・。 ViewStateの部分ですが、Trueに設定しておりましたがクリックすると ページの更新(ポストバック?)が掛かった様にページがちらつきます。 だから、ボタンは必ずポストバックが発生するんだと思っておりました。 ここら辺の参考になるページがございましたらお教え下さい。 アドバイスありがとうございます。 ---------------------------------------------------------------- 書いた後に思ったのですが > ボタンをクリックした瞬間に「B_Clear_Clickイベント」が発生 > ハンドルされたメソッドが処理されると認識しております。 > その前にdatabindするような記述はしているつもりは無いのですが・・。 はあくまでもサーバ側で処理される為、ページのリロード(ポストバック)が発生する。 「page_load」(スペル違ってるかもしれません)にてdatabindを記述していた場合 そのbindによってチェックボックスが初期化された と言う事なのでしょうか? [ メッセージ編集済み 編集者: bibiru 編集日時 2004-06-12 10:59 ] | ||||
|
投稿日時: 2004-06-14 19:54
こんばんは。そのとおりです。 Page_Init→Page_Load→ボタン押下など各種サーバコントロールのイベント(発生時)→Page_PreRender→Page_Unloadといった順番に毎回イベントが走ります(PostBackであろうとなかろうと)。ブレークポイントを張って実行してみてください。 ASP.NETの入門書にはだいたい書いてあると思います。 [ メッセージ編集済み 編集者: まるく 編集日時 2004-06-14 19:56 ] |