- PR -

【VS2003 + ASP.Net】DataGrid内ボタンクリックで 別ウィンドウ表示 ポストバックをさせたくない。

1
投稿者投稿内容
koku
会議室デビュー日: 2005/12/09
投稿数: 7
投稿日時: 2006-04-05 19:21
失礼します。

WebControls.DataGridを使用し(データの表示はDataViewにて)、
DataGridに配置しているWebControls.Buttonをクリックしたら
ポップアップウィンドウにてカレンダを表示している画面があります。

そこでは、あるフラグを見てボタンの表示を
デフォルトはa,b,c 値が違ったらa,b、それ以外はaだけ
という風にボタンの表示が可変になるように作られています。

カレンダーから日付をセットする先のClientIdは取得できていまして
日付のセットにはなんら問題がないのですが、
ポストバック発生後ボタンの表示が発生前はa,bだけだったのが
デフォルトのa,b,cに表示が戻ってしまいます。

ClientOnClickでの対応も考えたのですが、その際はClientIDの取得が
できず問題が解決ができていない状態です。

同じような問題、もしくは解決方法を知っている方がいらっしゃれば
ご教授ください。

よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-05 22:13
引用:

kokuさんの書き込み (2006-04-05 19:21) より:

そこでは、あるフラグを見てボタンの表示を
デフォルトはa,b,c 値が違ったらa,b、それ以外はaだけ
という風にボタンの表示が可変になるように作られています。

カレンダーから日付をセットする先のClientIdは取得できていまして
日付のセットにはなんら問題がないのですが、
ポストバック発生後ボタンの表示が発生前はa,bだけだったのが
デフォルトのa,b,cに表示が戻ってしまいます。


この、a, b, c のボタンがあるのは、カンレンダー画面ですか?それとも呼び出した画面ですか?

ポストバックすると、というのは、どういうことでしょう?
_________________
koku
会議室デビュー日: 2005/12/09
投稿数: 7
投稿日時: 2006-04-06 08:50
引用:

Jittaさんの書き込み (2006-04-05 22:13) より:

この、a, b, c のボタンがあるのは、カンレンダー画面ですか?それとも呼び出した画面ですか?

ポストバックすると、というのは、どういうことでしょう?




--
早速の返信ありがとうございます。

この、a, b, c のボタンは呼び出した画面で配置しております。
a, b, c のボタンはカレンダー画面を呼び出す画面ではありません。
カレンダーボタンを押す前にa, b, c のボタンの表示非表示はGridの
ItemDataBound時に処理されています。

カレンダー画面からの値渡し先はグリッド内にあるFotter及びデータ部なので
可変状態となります。

ボタンを押すとSubmitが走るためおきている現象ではないでしょうか?

知識不足で申し訳ございません。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-06 21:51
 仕様を考えているのは、掲示板を読んでいる人ではありません。掲示板に書き込んでいる人です。
 ですから、掲示板に書き込んでいる人、つまりあなたが仕様を理解しているかということと伝達能力が、回答をもらえるかどうかに直接影響します。頑張って鍛えましょう。

 それは置いておいて。
引用:

kokuさんの書き込み(2006-04-06 08:50)より:

この、a, b, c のボタンは呼び出した画面で配置しております。
a, b, c のボタンはカレンダー画面を呼び出す画面ではありません。
カレンダーボタンを押す前にa, b, c のボタンの表示非表示はGridの
ItemDataBound時に処理されています。


 a, b, c は、画面にひとつですか?それとも、grid の中にあって、複数セット表示されるのでしょうか。


 例えば、サーバ側で control.ClientID プロパティで表現されるものは、クライアント側ではただの id 属性です。したがって、カレンダーを表示するのを関数化し、
コード:
<input type="button" onclick="showCalender(this); return false;" id="table1_tr1_td1_calenderButton" ...
...

function showCalender(calledControl) {
    caller = calledControl.id;
    ...
}


のような事をすると(要確認)、クライアント側で ClientID と同じものを取得することが可能です。


 で、ポストバックというのは、カレンダーを表示するためのポストバックですね?ということは、ポストバックして、サーバ側で RegisterStartupScript メソッドを使って、ポップアップさせるスクリプトを仕込んでいるということでしょうか。IE7 では、デフォルトでブロックされます。IE6 でも、XP SP2 でブロックされるのかな?要注意です。

 それは今関係なくて。

 サーバ側に戻るということは、もう一度、
引用:

あるフラグを見てボタンの表示を
デフォルトはa,b,c 値が違ったらa,b、それ以外はaだけ
という風にボタンの表示が可変になるように


する処理を通っているはずですが?そこを通っていないのか、それともフラグがリセットされているのか、はたまた『値が違ったら』という判定で「前回の値と同じ」と判断されているのか。その辺がアヤシいところでしょうか。

〆 written by Jitta@わんくま同盟 on 2006/04/06
□ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006
1

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