質問

見つけたExcelコードへの変換に問題があります。私は.NET4.0でWebサイトプロジェクトに取り組んでおり、次のことを行うクラスを作成しました( http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html ): ジェネラコディセタグプレ

このクラスは、ページに表示されるGridViewに追加されるボタンを含むユーザーコントロールから呼び出します。これは期待どおりに機能します。ボタンをクリックすると、GridViewからのデータを含むExcelスプレッドシートを開くか保存するためのダウンロードオプションが表示されます。

ただし、別のGridView内のリンクボタンからこれを呼び出す場合は、データを含む動的グリッドビューを作成してエクスポートしたいと思います。これを行うと、クラスのResponse.End呼び出しからThreadAbortExceptionが発生します。

質問1:ユーザーコントロール内から同じコードを呼び出すと、なぜそのThreadAbortExceptionが発生しないのですか?ユーザーコントロールは独自のスレッドまたは他の種類のコンテキストを取得しますか?

ThreadAbortExceptionが発生したときに発生するエラーを検索すると、それをApplicationInstance.CompleteRequest()に置き換えようとしました。これを行うと、ThreadAbortExceptionは発生しなくなりますが、これにより、以前は機能していたユーザーコントロールが壊れます-グリッドからのデータを含む結果のExcelスプレッドシートの代わりに、含まれているページからのHTMLが含まれ、いずれにせよ、抑制するのは簡単です空のキャッチでそのエラー。ただし、動的に生成されたGridViewを使用した直接呼び出しは修正されません。そのコードは、「サーバーから受信したメッセージを解析できませんでした」というJavaScriptエラーを表示します。

ここで何が起こっているのかを正確に理解したいのですが、理解していなくても結果が必要な段階にあります。私が試した他のすべてのアプローチ(GridViewの代わりにdatagridなど)は同じ問題に遭遇し、「引き継ぐ」ことになると本質的に同じです 現在の応答と、stringwriterおよびhtmlwriterを使用して、データをExcelcontentTypeの応答にレンダリングします。そして、これは明らかにユーザーコントロールのコンテキストで機能するので、直接呼び出されたときに機能しない理由については、私は最後まで考えています...

役に立ちましたか?

解決 3

この問題は、実際にはExcelのエクスポートとはまったく関係がありませんでした。「…解析できませんでした」というエラーが重要でした。これらのリンクから、グリッドイベントが部分的なポストバックイベントのみを引き起こすというキーを取得しました:

http://forums.asp.net/t/1392827.aspx

http://forums.aspfree.com/net-development-11/gridview-footer-template-button-in-updatepanel-not-posting-back-236087.html

これは、ThreadAbortExceptionと「…解析できませんでした」エラーについて説明しています。これをImageButtonのOnPreRenderに追加することが解決策でした: ジェネラコディセタグプレ

他のヒント

代わりに試してください: HttpApplication.CompleteRequest() によると: http://www.c6software.com/codesolutions/dotnet/threadabortexception.aspx

彼らは追加のhtmlが完成することについて話し合っています

これを使用する ジェネラコディセタグプレ

gridview1の代わりにdivを使用できます ジェネラコディセタグプレ

Export to excelコードが呼び出されるイベントは、完全なポストバックを行う必要があります。問題は、部分的なポストバックしか行わないためです。

同じエラーが発生しましたが、完全なポストバックを実行すると解決しました。

これが誰かに役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top