- PR -

DataGridのCheckBox(テンプレート)について

投稿者投稿内容
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-05 12:45
はじめまして、C#.NETにてWEBアプリを作成しています。
(初心者です)
DataGridのテンプレートを用いてCheckBoxを貼り付け
グリッドでチェックされた行の値(氏名など)を送信するプログラムを考えています。
cs側では以下のように作成できました。
////////////////////
private void クリックイベント(object sender, System.EventArgs e)
{
for(int i = 0; i < DataGrid1.Items.Count; i++)
{
CheckBox tt = (CheckBox)DataGrid1.Items[i].Cells[0].Controls[1];
if(tt.Checked)
{
test_label.Text += DataGrid1.Item[i].Cells[5].Text + ",";
}}}
///////////////////
以上のコードでやりたいことはできたのですが、
これを”hidden”を用いて別ページに送信するためにJavaScript側で同様のコードを書きたいのです。
for文内で
document.Form1.DataGrid1.Items.Countのように記述してもエラーが出てしまいます。
(Nullまたは、オブジェクトではありませんと)

どのような記述をすれば同様の事を実現できるのでしょうか?
宜しくお願いいたします。

[ メッセージ編集済み 編集者: 未記入 編集日時 2004-02-05 12:45 ]
無月 重造
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 67
投稿日時: 2004-02-05 13:33
document.Form1.DataGrid1.Items.Count
などとやってもJavaScriptでDataGridを参照することはできません。

DataGridはあくまで「サーバコントロール」ですので
クライアント側ではテーブルとなっているはずです。

一回、ブラウザに出力された「データグリッドを含むページ」のソースを確認してみてください。
そうすれば自ずと解決方法が見えてくると思います。
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-05 14:05
お返事ありがとうございました。
仰る通りでした。

IDを確認すると、「DataGrid1__ctl2_Select_line」〜「DataGrid1__ctl10_Select_line」
のようになっていますが、このIDを自分で決めることは可能でしょうか。
(出来ない場合、FOR文で回す際にどのように指定すればよいでしょうか?)

わからないことだらけで勉強しろ!っと仰りたいでしょうが
宜しくお願いいたします。
無月 重造
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 67
投稿日時: 2004-02-05 14:24
そのIDを決めるのは不可能だったと思います。
だた、そのIDのつけ方は規則的に決まっているので、forではなくWhileで回してみるのもありかと。

string変数にIDをいれ、(たとえば変数名をstrIDとして)
document.getElementById(strID) != nullで識別してみるとか

forではないですが、これならWhileでまわせると思います。
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-05 14:58
ありがとうございます。

早速試したのですが、
strID = "document.Form1.DataGrid1__ctl2_Select_line";
document.getElementById(strID);
ではnullが返ってきてしまいました。

また、
document.getElementById("DataGrid1__ctl2_Select_line");
では値を得ることが可能でした。

前者が不可能であるとWhile文等で回すことは不可能でしょうか?

わからずやで済みません。
宜しくお願いいたします。

[ メッセージ編集済み 編集者: BB.NK 編集日時 2004-02-05 15:00 ]
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-05 15:10
document.Form1がいらないですね。。。
調べ不足もほどほどにってことですね。

ありがとうございました。
できました。

今回のようにJavascriptでidを拾う場合は、
実行してソースを見る方法が正しいのでしょうか?

今後とも宜しくお願いいたします。

[ メッセージ編集済み 編集者: BB.NK 編集日時 2004-02-05 15:11 ]
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-05 15:33
迷惑ついでにもう一つ質問です。

最初に書きました通り、チェックされた行の値を"hidden"で飛ばすのですが、
肝心のチェックされた行の値が取ってこれません。
先ほどのアドバイスを元にソースを見ると、

<td nowrap="nowrap">123</td><td nowrap="nowrap">テスト</td>

といった具合でどうやって取得するかわかりません。
どのようにしたらよいでしょうか?
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-05 15:46
>今回のようにJavascriptでidを拾う場合は、
>実行してソースを見る方法が正しいのでしょうか?

通常は
(CheckBox)DataGrid1.Items[i].Cells[0].Controls[1].ClientIDでIDがわかるので
そのIDを使ってサーバ側でJAVAスプリクトを生成して出力します。

><td nowrap="nowrap">123</td><td nowrap="nowrap">テスト</td>
このままだと取得できないと思うので値を設定する列もテンプレートにしてTextBoxを
ReadOnlyで設定する必要があります。


あとボタンクリック時にhiddenに値を設定するならJAVAスプリクトじゃなくても
大丈夫ですよ。もし違うタイミングだったらすみません。

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