3

Telerik RadGrid 2.0.2.0 を使用する ASP.NET Web アプリケーションは、Windows 7 との互換性のために更新する必要があります。問題は、Excel ファイルをエクスポートする既存の機能では、Office 2007 と互換性のある Excel ファイルが生成されないことです。Office 2007 は、一般的なアプリケーションの新しい Windows 7 セットの一部です。

問題は次のコード行にあります。

ExportXLS.Telerik.WebControls.RadGrid RadGrid1 = new
       ExportXLS.Telerik.WebControls.RadGrid();
RadGrid1.MasterTableView.ExportToExcel(TableName, true, false);

RadGrid.Net2 バージョン 4.5.0.0 という別の dll があることを発見しました。これには、バージョン 2.0 の dll では利用できない「ExportToExcel2007」メソッドが含まれています。この方法では、Excel 2007 で開くことができる有効な Excel ファイルが生成されます。

Telerik.WebControls.RadGrid RadGrid1 = new Telerik.WebControls.RadGrid();
RadGrid1.MasterTableView.ExportToExcel2007(TableName, true, false);

問題は、2 つの dll の間には大きな違いがあり、新しい dll を使用するように切り替えるのは簡単ではないように見えることです。私たちの意図した解決策は、アプリケーションで両方の dll を参照し、2007 互換の Excel ファイルの作成に問題がある画面でのみ新しい方を使用することでした。

以下の記事を参考にして、

http://blogs.msdn.com/b/ansonh/archive/2006/09/28/extern-alias-walkthrough.aspx

次の小さな変更を加えました。

  1. Web プロジェクトに「RadGrid.Net2.dll」への参照を追加し、この参照のエイリアス プロパティを「 ExportXLS 」に調整しまし

  2. これを ExportExcel.aspx.cs コード ビハインド ページの先頭に追加します。

    extern エイリアスExportXLS ;

  3. 次に、radgrid.net2.dll の修飾参照を参照して、新しい dll を使用して radgrid をインスタンス化します。

    ExportXLS .Telerik.WebControls.RadGrid RadGrid1 = 新しいExportXLS .Telerik.WebControls.RadGrid();

  4. ExportToExcel メソッドを変更して、2007 の対応するメソッドを使用するようにしました。

    RadGrid1.MasterTableView. ExportToExcel2007 (テーブル名、真、偽);

これにより、ExportExcel.aspx ページの問題が解決され、画面に Excel 2007 互換の Excel スプレッドシートが生成されるようになりましたが、この変更により、RadGrid を使用するアプリケーションの他のページが壊れてしまいました。これはエラーです:

    c:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\7ff38b9a\2680aee3\App_Web_systemmapsearch.ascx.a97e7c59.tlmhafnf.0.cs(251): error CS0433: 

The type 'Telerik.WebControls.GridRowIndicatorColumn' 
exists in both 
    'c:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET 
    Files\root\7ff38b9a\2680aee3\assembly\dl3\cd8ec314\002177c0_d2e8cb01\RadGrid.DLL' 
and 
    'c:\WINNT\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\7ff38b9a\2680aee3\assembly\dl3\428a2b2d\002177c0_d2e8cb01\RadGrid.Net2.DLL'

私の予想では、他の Web ページは RadGrid.dll の認定されていない古い 2.0.2.0 バージョンを引き続き使用し、引き続き機能すると予想していましたが、そうではありません。

読み込みに失敗したユーザー コントロール SystemMapSearch.ascx の分離コードからのコードの一部を次に示します。

<%@ Register TagPrefix="radG" Namespace="Telerik.WebControls" Assembly="RadGrid" %>
<radg:radgrid id="RadGrid1" cssclass="RadGrid" runat="server" allowpaging="True" allowsorting="True" gridlines="none"
        pagesize="20" width="100%" borderwidth="0" AutoGenerateColumns="False">

NameSpace ディレクティブを変更してグローバル名前空間を含めようとしましたが、これにより無効な参照が発生します。

<%@ Register TagPrefix="radG" Namespace="global::Telerik.WebControls" Assembly="RadGrid" %>

ExportExcel.aspx ページを変更すると他のページが破損するのはなぜですか? また、この問題を解決するにはどうすればよいですか?

4

4 に答える 4

3

こんにちは、これはあなたの問題を解決するのに役立つかもしれません。

  • 何らかの理由で、アプリケーションが 2 つの異なるバージョンの Telerik.Web.UI アセンブリを読み込んでいます。これはおそらく、GAC に両方の Telerik.Web.UI アセンブリがあるためです。

    この問題を解決するには、プロジェクトを調べて、(web.config または ASPX ページで) Telerik.Web.UI アセンブリを参照している場所で、完全修飾アセンブリ名を使用していることを確認します。例えば:

    "Telerik.Web.UI、バージョン = 2009.2.701.20、カルチャ = ニュートラル、PublicKeyToken = 121fae78165ba3d4"

    「Telerik.Web.UI」の代わりに。完全修飾名にはバージョン番号が含まれているため、ASP.NET が混乱して両方のアセンブリを同時にロードすることはありません。参照:コンパイル エラー メッセージ: タイプ 'Telerik.Web.UI.RadFileExplorer' が両方に存在します。

  • 既存の telerik RadControls アプリケーション (RadChart を含む) を RadControls for ASP.NET AJAX にアップグレードすると、次のエラーが発生する場合があります。

    エラー 1 タイプ 'Telerik.Charting. 「c:\WINDOWS\assembly\GAC_MSIL\Telerik.Charting...\Telerik.Charting.dll」と「c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files」の両方に存在します。 .\RadChart.Net2.DLL'

    このエラーの理由は、RadChart (3.x 以降) と RadControls for ASP.NET AJAX Chart が共有コードを使用しているためです。共有コードは、Telerik.Charting.dll アセンブリの形式になっています。下位互換性の理由から RadChart.Net2.dll で ILMerged になり、ASP.NET AJAX 用の RadControls とは別に出荷されます。RadChart.Net2.dll と Telerik.Charting.dll の両方を参照しようとすると、エラーが発生します。

    この問題を解決するには、次の 2 つの方法があります。

    1. プロジェクトを移行して RadControls for ASP.NET AJAX を使用する場合、最初に Web.config ファイルから Telerik.Charting.dll への参照を削除することをお勧めします。この場合、古い ASP.NET Chart を使用することになり、スイートに付属の Telerik.Charting.dll は必要ありません。Telerik.Charting.dll は、Chart 以外の ASP.NET AJAX コントロールの操作には必要ありません。

    2. すでに RadChart for ASP.NET AJAX を使用している場合は、RadChart.Net2.dll への参照を削除し、引き続き Telerik.Charting.dll を使用する必要があります。

    RadChart for ASP.NET AJAX と RadChart 4.x の機能は 99% 同一であることに注意してください。どちらを使用するかは、個人の好みに合わせて決定してください。最も重要な違いは、アセンブリ名と、RadChart for ASP.NET AJAX が HttpHandler を使用して画像を表示することと、RadChart 4.x が下位互換性のために RadControls\Image.aspx を引き続き使用することです。参考:Telerik.Charting. Telerik.Charting.dll と RadChart.Net2.dll の両方で

  • これは一般的なエラーであり、通常は、参照されているアセンブリと実際に使用されているアセンブリが一致していないことを意味します。ほとんどの場合、サイド バイ サイドのレポート インストールがあり、参照が一致していません。アップグレード ウィザードを使用して、Telerik レポートを含むプロジェクトをアップグレードし、再構築してください。手動参照を追加した場合、つまり Copy Local = True の場合は、\bin フォルダーからすべてのアセンブリを削除し、プロジェクトに適切な参照を再度追加してから、プロジェクトを再構築します。それでも問題が発生する場合は、各参照で完全なアセンブリ修飾名を指定したことを確認してください。例:

    <%@ Register assembly="Telerik.ReportViewer.WebForms, Version=5.0.11.328, Culture=neutral, PublicKeyToken=a9d7983dfcc261be" namespace="Telerik.ReportViewer.WebForms" tagprefix="telerik" %>

    ではなく:

    <%@ Register TagPrefix="telerik" Assembly="Telerik.ReportViewer.WebForms" Namespace="Telerik.ReportViewer.WebForms" %>
    参照: Telerik.Reporting.Report は両方に存在します ....

  • web.config ファイルの "compilation" 要素に batch="false" 属性を追加します。

    この問題は、ASP.NET 2.0 がアプリケーション参照とアプリケーションのフォルダ構造を使用してアプリケーションをコンパイルする方法が原因で発生します。アプリケーションの web.config ファイル内の要素のバッチ プロパティが true に設定されている場合、ASP.NET 2.0 はアプリケーション内の各フォルダーを個別のアセンブリにコンパイルします。
    参照: ASP.Net エラー: 「タイプ 'foo' は、「temp1.dll」と「temp2.​​dll」の両方に存在します

于 2013-02-07T07:40:46.840 に答える
2

私が取り組んできた古いプロジェクトで同様の問題に遭遇しました。

Webアプリケーションをコンパイルしてデプロイできたため、一時ファイルを削除すると問題が解決したことを知っています(すべての機能が期待どおりに機能しました)。

なぜそのようなエラーが発生したのか、私は十分に掘り下げていませんでした。

于 2013-02-03T23:01:32.727 に答える
1

私は実際にこれを行ったことはありませんが、新しい Telerik dll のラッパー dll を作成して、必要な機能のみを公開し、プロジェクトでラッパーを参照できると思います。

于 2013-02-04T20:43:46.907 に答える
1

アセンブリ「Radgrid」のすべてのオカレンスを変更しました

<%@ Register TagPrefix="radG" Namespace="global::Telerik.WebControls" Assembly="RadGrid" %>

<%@ Register TagPrefix="radG" Namespace="global::Telerik.WebControls" Assembly="RadGrid.Net2" %>

この変更を行うまでは、古い radgrid.dll への参照がなくなったにもかかわらず、bin フォルダー内の古い radgrid.dll を取得していたと思います。

いずれにせよ、Assembly プロパティのすべての出現箇所を慎重に変更し、古い未使用の dll を bin フォルダーから削除したところ、機能しました。

于 2013-02-07T16:18:08.157 に答える