- PR -

MasterPageを使用したページでGridViewのSelectedIndexChangedが捕捉出来ない。

1
投稿者投稿内容
matrix
会議室デビュー日: 2008/07/13
投稿数: 15
投稿日時: 2009-02-24 17:06
あつかましくも、またMasterPageがらみのご質問です。
宜しくお願いします。

【環境】WinXP CS2005 C# WebForm GridView
【現象】GridViewの任意の行をクリックしSelectedIndexChangedイベントを捕捉してクリックした行番号とその行の各カラムの値を取得する仕組みを作りましたがMaterPageのフォームだとSelectedIndexChangedイベントが補足できないか、またはイベントが発生していない?。

【状況】
MasterPageフォームでもfunction SelectedRow()のrowNum(選択された行), gridViewId(GridView名)のは正しい値が入っています。
__doPostBack()でPage_Loadは捕捉できていますが、GridViewのSelectedIndexChangedイベントが捕捉できません。
(ブレークポイントに引っかかりません)

なんとも醜い文章で申し訳ございません。
隠しtextなどで選択行を取得することは出来ますが、このスタイルで実現しないと、とっても困ってしまう事情があります。
賢者の皆様、宜しくお願い申し上げます。

【実装概要】
1)GridViewのRowCreatedイベントで、選択ボタンセルを非表示にし、行をClickされた場合、JavaScriptを実行するようにします。(SelectedRow())
public void HideSelectButton(ref GridView vGridView, GridViewRowEventArgs e)
{
try
{
//選択ボタンセルを非表示にする(Visible = False だと選択ボタン押下を裏で制御ができないため)
if (e.Row.RowType != DataControlRowType.Pager)
{
e.Row.Cells[0].Style.Add("display", "none");
}

//データ行ではない場合は、何もしない
if (e.Row.RowType != DataControlRowType.DataRow)
{
return;
}

//行をClickされた場合、JavaScriptを実行するよう設定する
string clickEvent = String.Format("SelectedRow('{0}', '{1}')", e.Row.RowIndex, vGridView.ClientID);
e.Row.Attributes.Add("onClick", clickEvent);

//'行のカーソルを手のマークにする
e.Row.Style.Add("cursor", "hand");
return;
}
-------------------------------------------------------------------------------
2)実行後では以下のHTMLが生成されます。(関連部のみ掲載します)

function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}

================================================================================================
3)GridViewから生成されたコード

<table cellspacing="0" rules="all" border="1" id="GridView1" style="font-family:MS ゴシック;
font-size:Small;border-collapse:collapse;">
<tr style="font-family:MS ゴシック;font-size:Small;">
<th scope="col" style="display:none;">選択</th>
<th scope="col">掲示板名</th>
</tr>
<tr onClick="SelectedRow('0', 'GridView1')" style="cursor:hand;">
<td style="display:none;">
<a href="javascript:__doPostBack('GridView1','Select$0')">選択</a>
</td>
<td style="font-family:MS ゴシック;">メッセージ01</td>
</tr>
<tr onClick="SelectedRow('1', 'GridView1')" style="background-color:Aqua;cursor:hand;">
<td style="display:none;">
<a href="javascript:__doPostBack('GridView1','Select$1')">選択</a>
</td>
<td style="font-family:MS ゴシック;">メッセージ02</td>
</tr>
</table>
========================================================================================
3)javascriptです。
<!--------------------------------------------------------------------->
<!-- GridViewで行選択された時のスクリプト -->
<!--------------------------------------------------------------------->
<script type="text/javascript" language="javascript">
function SelectedRow(rowNum, gridViewId)
{
__doPostBack(gridViewId, 'Select$' + rowNum);
}
</script>
matrix
会議室デビュー日: 2008/07/13
投稿数: 15
投稿日時: 2009-02-24 17:19
追記します。
先のhtmlはMasterPageを使用しないページのものです。
MasterPageを使用すると以下の点が変更された状態のhtmlが生成されます。
上行がMasterPageを使用しないページのコード、下行がMasterPageを使用したページのコードです。

<a href="javascript:__doPostBack('GridView1','Select$1')">

<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$GridView1','Select$1')"
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-24 17:24
すみません。
質問(?)内容がわかりません。
端的に実現できない事項を教えて下さい。
このままだと何がわからないかもわからないけどとにかく問題点を見つけて
そして修正して教えて下さい、ってな事になります。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-02-24 18:22
賢者でもないのに回答してしまって、ホントすみません。

引用:

<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$GridView1','Select$1')"


この形の文字列は、vGridView.UniqueID で得られるみたいですね。
ただ、質問のような使い方が合っているかどうかは、私にはわかりません。
matrix
会議室デビュー日: 2008/07/13
投稿数: 15
投稿日時: 2009-02-24 21:15
誠に申し訳ございません。
質問文がハチャメチャで、ご返答頂く事ができないようです。
本件についてはこれでクローズさせて頂き、改めて投稿したいと思います。
1

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