要件
レポートが正常にレンダリングされた場合、ユーザーがレポートの現在のパラメーターの状態を保存できるようにします。すなわち。すべてのドロップダウンが選択され、空白を許可しない空のフィールドが入力されます。
ReportViewer
の動作 [View Report] ボタンが押されると、レポート ビューアーはクライアント側の検証を実行し、すべてがうまくいかない場合はアラートを表示します。それ以外の場合は、レポートが再生成され、javascript 関数: pageLoad() が呼び出されます。
考えられる解決策
- どういうわけか、「レポートの表示」クリックイベントにハンドルを追加し、「保存」ボタンを無効にします。
- pageLoad() メソッドで「保存」ボタンを有効にします。
これは、ソリューションを実装するための最良の方法ですか? その場合、[レポートの表示] ボタンへの参照を取得するにはどうすればよいですか?
到着予定時刻:
これが私が現在使用しているコードです。
- btnViewReportは、ReportViewer のパラメーター領域の右側に表示されるボタンです。
- btnSaveは、ReportViewer の外に追加したボタンです。それが何をするかは問題ではありません。重要なことは、btnViewReportがクリックされ、レポートが正常に生成された (すべての必要なパラメーターが入力された) 場合にのみ表示されることです。
- pageLoadは、部分的なコールバックがあるたびに ScriptManager によって呼び出される関数です。btnViewReportをクリックすると、部分的なポストバックが発生します。
var firstTimePageLoaded = true;
function pageLoad() {
if (this.firstTimePageLoaded) {
$("#btnSave").hide();
this.firstTimePageLoaded = false;
}
else {
$("#btnSave").show();
}
var btnViewReport = $('#<%=ReportViewer1.ClientID %> input[type="submit"][value="View Report"]');
btnViewReport.unbind('click'); // pageLoad() is sometimes called twice.
btnViewReport.click(function () {
$("#btnSave").hide();
});
}
一部のパラメーター フィールドを空のままにして [レポートの表示] をクリックすると、部分的なポストバックが発生しないため、[保存] ボタンが非表示になります。
ページが最初に表示されたときにボタンが表示されないようにするには、 firstTimePageLoaded フラグが必要です。それは機能しますが、私のくだらない回避策のリストのすぐ上にあります。