DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ASP.NETでのDataGrid行選択について

環境/言語:[WinXP、ASP.NET、.NET Framework1.1]
分類:[ASP.NET]

こんにちわ。
私はASP.NETで開発を行っているのですが、
DataGridのダブルクリックが上手くいかずに困ってます。

やりたいことは、DataGridの任意の行をダブルクリックした際、
その行の各データをテキストボックスに表示させたいのです。

現在は下記のような処理を入れ、
ダブルクリックした行の値を取得しているのですが、
セルによっては取得できない場合があります。
何かいい方法はありませんか?
よろしくお願いします。

<asp:Label ID="***" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.***") %>' value='<%# DataBinder.Eval(Container, "ItemIndex") %>' OnDblclick="SetRowNumber(value)" >

function SetRowNumber(value) {
document.Form1.TextBox1.value = value
document.Form1.submit();
}
まず、確認させて下さい。
<asp:Label の記述ですが、終了タグが違っていますし、valueもOnDblclickもLabelにはありませんが、これできちんと動いているのでしょうか?
trapemiyaさん
レスありがとうございます。

> <asp:Label の記述ですが、終了タグが違っていますし、valueもOnDblclickもLabelにはありませんが、これできちんと動いているのでしょうか?

実際にはこのような感じになっています。
<ItemTemplate>
<asp:Label ID="***" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.***") %>' value='<%# DataBinder.Eval(Container, "ItemIndex") %>' OnDblclick="SetRowNumber(value)" >
</asp:Label>
</ItemTemplate>

表示しているColumnは3列あり、
最初の列ではどこをダブルクリックしてもきちんとイベントが発生します。
しかし、2、3列目にも全く同じ処理を入れているのですが、
発生する時としない時があるのです。

列毎ではなく、行単位にダブルクリック処理は入れられないのでしょうか?
> 実際にはこのような感じになっています。

なるほど。実際にはspanタグに変換されるので、動くのですね。

> しかし、2、3列目にも全く同じ処理を入れているのですが、
> 発生する時としない時があるのです。

実際に生成されたHTMLソースを確認してみて下さい。考えられるのは、valueが文字の場合です。文字であれば変数とみなされるので、javascriptでエラーとなります。確実にするためには、valueをリテラルで囲む必要があります。

> 列毎ではなく、行単位にダブルクリック処理は入れられないのでしょうか?

trタグにOnDblclickをセットすれば可能だと思います。以下が参考になると思います。
DataGridの行(trタグ)にデータをセットするには?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14492&forum=7&1
trapemiyaさんへ

解決しました。
ラベルのWidth設定をしなかった為、データ長が短い場合、
ラベルの幅がセルの幅を満たしていない状態でした。

> trタグにOnDblclickをセットすれば可能だと思います。以下が参考になると思います。
> DataGridの行(trタグ)にデータをセットするには?
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14492&forum=7&1

初歩的な質問で申し訳ないですが、
WebコントロールのDatagridにもTRタグは使えるのですか?
解決済み!
> ラベルのWidth設定をしなかった為、データ長が短い場合、
> ラベルの幅がセルの幅を満たしていない状態でした。

そういうこともあるんですね。私も良い経験になりました。

> 初歩的な質問で申し訳ないですが、
> WebコントロールのDatagridにもTRタグは使えるのですか?

DataGridはブラウザに送られる時にはtableタグに変換されますので、その中のtrタグにOnDblclickを設定しようということです。
解決済み!
> DataGridはブラウザに送られる時にはtableタグに変換されますので、その中のtrタグにOnDblclickを設定しようということです。

そういうことですね。
確かに、それだと行全体にダブルクリックがかけられますね。
ご指導ありがとうございました。
解決のチェックを入れ忘れました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板