- PR -

aspxのJavaScriptでGridViewを取得する

投稿者投稿内容
apo
常連さん
会議室デビュー日: 2008/11/10
投稿数: 27
投稿日時: 2009-01-23 17:03
GridViewの各行にあるhiddenFieldのIDを、
サーバー側で番号をIDの後につけて設定すると、
今度は、JavaScript側で、GridViewの行数は可変ですから、
そのIDでデータ取得ができません。
というのは、aspx は、実際に画面を表示すると、ソース自体を自動で書き換えてしまい、そのときに、IDも変わります。
そのIDを取得するためには
hiddenFieldのIDが
ID="hid"
とすると
JavaScriptでは
var a = document.getElementById("<%=hid.ClientID %>;
で取得できますが、
この"hid"の部分が
hid01 -> hid02 -> ...
と可変になると、
それを指定することができません。
というのは、
この「hid.ClientID」の部分は
文字列ではないからです。

ですので、このIDはすべて同じにしていて
GridViewのオブジェクトを取得してから
var grid = document.getElementById("<%=grvw.ClientID %>;
grid.rows(i).cells(...
として取得したいのですが、
九列目のセルの中には
前出のとおり ボタン二個、hiddenFieldが一個あるので
どうやってこのhiddenFieldを取得したらいいかがわかりません。
ご教授お願いいたします。
108
常連さん
会議室デビュー日: 2007/12/12
投稿数: 45
投稿日時: 2009-01-23 17:21
RowDataBound時にFindControlでとれませんか?
その時にボタンのOnClientClick = スクリプト
を設定して引数で渡してあげるとか。
apo
常連さん
会議室デビュー日: 2008/11/10
投稿数: 27
投稿日時: 2009-01-23 17:33
引用:

108さんの書き込み (2009-01-23 17:21) より:
RowDataBound時にFindControlでとれませんか?
その時にボタンのOnClientClick = スクリプト
を設定して引数で渡してあげるとか。



この方法は実はできているのですが、私なりのこだわりがあって、javaScriptでどうしてもしたいのです。
だれか、JavaScriptで取得する方法しりませんでしょうか?
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2009-01-23 17:55
childNodes

>この方法は実はできているのですが、私なりのこだわりがあって、javaScriptでどうし>てもしたいのです。

そゆ事は先に書こうよ。


[ メッセージ編集済み 編集者: まるく 編集日時 2009-01-23 18:01 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-01-24 00:14
引用:
この方法は実はできているのですが、私なりのこだわりがあって、javaScriptでどうしてもしたいのです。

引用:
JavaScriptでは
var a = document.getElementById("<%=hid.ClientID %>;
で取得できますが、

コード表示ブロックやデータバインド式を使用するのはかまわないんですよね。

GrivdViewの外に書くなら単にコードブロック使って、
document.getElementById('<%= grvw.Rows(2).FindControl("hiddenField").ClientID %>')

ItemTemplateの中に書くならデータバインド式を使って、
document.getElementById('<%# CType(Container, GridViewRow).FindControl("hiddenField").ClientID%>')
で取れると思います。
apo
常連さん
会議室デビュー日: 2008/11/10
投稿数: 27
投稿日時: 2009-01-24 12:14
引用:

GrivdViewの外に書くなら単にコードブロック使って、
document.getElementById('<%= grvw.Rows(2).FindControl("hiddenField").ClientID %>')


GridViewの外に書くというのは、<script type="..."> <script>
の中に書いてそのfunctionを呼び出すという形ですね?
すみません、簡単な事を聞いていると思いますが・・・
それと、このコードブロックの中の言語はVB.netとみてよろしいのですか?

引用:

ItemTemplateの中に書くならデータバインド式を使って、
document.getElementById('<%# CType(Container, GridViewRow).FindControl("hiddenField").ClientID%>')
で取れると思います。



すると、この中に書くというのは、ボタンのOnClientClickイベントの中に直接書き込むと云うことですか?
それとも、
<ItemTemplate>
※ボタンの処理・・・

<script>

JavaScriptの処理

</script>

</ItemTemplate>

という形で書くということですか?
初歩的な事を聞いて済みませんが、JavaScriptにはまだあまりなれていないもので。

あと、何故、
ItemTemplateの外に書く場合は、コードブロックにして、
ItemTemplateの中に書く場合は、データバインド式を使うのでしょうか?

それと、単純なことで申し訳ありませんが
<%= ... %>と
<%# ... %>の
意味と、使い分け方・・・
教えてください。良くわからないです。よくわからず、コーディングをしている状況で順序が逆なような気もしますが、よろしくお願いします。

[ メッセージ編集済み 編集者: apo 編集日時 2009-01-24 12:17 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-01-24 23:19
引用:
GridViewの外に書くというのは、<script type="..."> <script>
の中に書いてそのfunctionを呼び出すという形ですね?

どうやるかは、何をしたいのかと、工夫の方法次第です。たとえば、messageFunc(mode)で、
何行目のボタンを押されたかをどうやって判断させようとしたかなどによります。

引用:
それと、このコードブロックの中の言語はVB.netとみてよろしいのですか?

そうです。

引用:
すると、この中に書くというのは、ボタンのOnClientClickイベントの中に直接書き込むと云うことですか?
それとも、
<ItemTemplate>
※ボタンの処理・・・

<script>

JavaScriptの処理

</script>

</ItemTemplate>

という形で書くということですか?

それはどちらでもいいと思います。というかここも何をしたいかなどによります。
いずれにしても、引用符やscriptタグがごちゃごちゃするし、
私もvb側でRowDataBoundやRowCreatedなどで処理する方法を推奨します。
JavaScriptに慣れていないならなおさらです。RowDataBoundできてるなら更になおさらです。

ところで、HiddenFieldの値が必要なだけならバインド式を使用すれば取れるので、
getElementByIdする必要はないようにも思います。

引用:
あと、何故、
ItemTemplateの外に書く場合は、コードブロックにして、
ItemTemplateの中に書く場合は、データバインド式を使うのでしょうか?

それと、単純なことで申し訳ありませんが
<%= ... %>と
<%# ... %>の
意味と、使い分け方・・・
教えてください。良くわからないです。よくわからず、コーディングをしている状況で順序が逆なような気もしますが、よろしくお願いします。

<%= ... %>は単にaspx内にvbの値を埋め込むためのものです。

<%# ... %>は一言で説明するのは難しいです。以下、完璧な説明ではないと思ってください。
まず、GridViewの各行は一つ一つのコントロールになっています。
そのコントロールをaspx側から参照するための書き方が<%# ... %>で
Containerがそのコントロール(型はGridViewRow)になります。
こういうものはGridView以外にもありContainerの型はそれぞれ異なります。
apo
常連さん
会議室デビュー日: 2008/11/10
投稿数: 27
投稿日時: 2009-01-27 09:59
ベルさん、それに他の方々、いろいろとご説明いただきありがとうございます。とても参考になりました。

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