1

私は現在、ボリュームデータのレポートとレンダリングに使用される会社向けの Web ベース (asp.net/C#) ボリューム追跡ツールを設計しています。ユーザーがデータをレンダリングする 1 つの方法は、asp.net 組み込みグラフを使用するグラフ ツールを使用することです。ユーザーは、さまざまなフィルタリング オプションを多数設定して、グラフを適切にカスタマイズし、同じページに表示させることができます。チャートの内容に関しては、すべて問題なく動作していますが、ユーザーがグラフのより高品質の画像を生成して別のウィンドウに表示できるようにするためのいくつかのコントロールを作成しました。Response.Redirect の拡張メソッドを使用して、以下に示すように、チャート画像の高解像度バージョンを含む新しいウィンドウにユーザーをリダイレクトしています。

private void DownloadImage(int width, int height)
    {
        double scale = width / ViewGraphChart.Width.Value;

        // Resize chart:
        ViewGraphChart.Width = width;
        ViewGraphChart.Height = height;

        // Resize titles:
        foreach (Title t in ViewGraphChart.Titles)
        {
            t.Font = new Font(t.Font.FontFamily, (float)(t.Font.Size * scale), FontStyle.Regular);
        }

        // Resize legends:
        foreach (Legend l in ViewGraphChart.Legends)
        {
            l.Font = new Font(l.Font.FontFamily, (float)(l.Font.Size * scale), FontStyle.Regular);
        }

        UpdateChart();

        // Open image in new window:
        Response.Redirect(ViewGraphChart.CurrentImageLocation, "_blank", "");
    }

これまでのところ、新しいウィンドウが開き、ユーザーには高解像度バージョンのグラフ イメージが渡されます。ただし、問題は、ツール内のチャートも当然変更され、明らかに大きすぎてレイアウト内に適切に収まらないことです。リダイレクトの直後にチャートのプロパティをリセットすることでこれを改善しようとしましたが、これにより「HD」チャート画像がツール内の同じ小さなチャート画像として表示されました。したがって、チャートのコピーを作成し、コピーを変更してユーザーに渡すのが最善の方法であると考えましたが、元の画像はツール内で小さいサイズのままです。大量のデータバインディングやチャートに接続されている他のものがあることを考えると、これを行う簡単な方法はありますか、それとも他の方法がありますか?

少々急いでいるので、不明な点があれば教えてください。詳しく説明します。

よろしく、アンティ

編集:

Response.Redirect 拡張メソッドの背後にあるコード。私の記憶が正しければ、まさにこのページから借りました。

    public static void Redirect(this HttpResponse response, string url, string target, string windowFeatures) 
    { 
        if 
            ((String.IsNullOrEmpty(target) || target.Equals("_self", StringComparison.OrdinalIgnoreCase)) 
            && String.IsNullOrEmpty(windowFeatures)) 
        {
            response.Redirect(url); 
        }
        else
        {
            Page page = (Page)HttpContext.Current.Handler;

            url = page.ResolveClientUrl(url); string script;

            if (!String.IsNullOrEmpty(windowFeatures))
            {
                script = @"window.open(""{0}"", ""{1}"", ""{2}"");";
            }
            else
            {
                script = @"window.open(""{0}"", ""{1}"");";
            }

            script = String.Format(script, url, target, windowFeatures);
            ScriptManager.RegisterStartupScript(page, typeof(Page), "Redirect", script, true);
        } 
    } 
4

0 に答える 0