我借用本区一位兄弟写的函数,从数据源取数据显示图表转GIF显示在客户端,编译没问题,DataTable 绑定到DataGrid 也没问题,为何图片显示是红X  ??求各位兄弟指点一二,谢谢!!!
主要代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string cmd="select n1,n2 from tmp";
DataTable dt=ts.getTable(cmd);
ts.showTable(this.DataGrid1,dt); 
                            //用 dt 给datagrid BIND() ,显示正常,两列数据
ChartHolder.Controls.Add(new LiteralControl(dt_chart(dt,400,400,"TEST")));
}
         //生成OWC图表转GIF文件的函数
/// <summary>
/// 生成图表
/// </summary>
/// <param name="dt">数据源(DataTable)</param>
/// <param name="chartWidth">图片宽度</param>
/// <param name="chartHeight">图片高度</param>
/// <returns>图片名称</returns>
public string dt_chart(DataTable dt,int chartWidth,int chartHeight,string chart_name)
{
ArrayList[] data_al=new ArrayList[dt.Columns.Count-1]; //统计列数
for(int i=0;i<dt.Columns.Count-1;i++)
{
data_al[i] = new ArrayList();
data_al[i].Add(dt.Columns[i]); } OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass ();  //在ChartSpace对象中添加图表,Add方法返回chart对象
OWC11.ChChart objChart = objCSpace.Charts.Add (0); 
//指定图表是否需要图例
objChart.HasLegend = true;
objChart.HasTitle=true;
objChart.Title.Caption=chart_name;
objChart.Axes[0].Font.Color="red"; //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到 objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeSmoothLineMarkers; for(int i=0;i<data_al.Length-1;i++)
{
//在ChartSpace对象中添加图表,Add方法返回chart对象
objChart.SeriesCollection.Add(i);
objChart.SeriesCollection[i].DataLabelsCollection.Add().Font.Color="red";
objChart.GapWidth=280;
objChart.BarWidth=400; string strSeriesName="指标"; //给定series的名字
objChart.SeriesCollection[i].SetData (OWC11.ChartDimensionsEnum.chDimSeriesNames,(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral,strSeriesName); //给定分类
objChart.SeriesCollection[i].SetData (OWC11.ChartDimensionsEnum.chDimCategories,(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral,data_al[0].ToArray()); //给定值
objChart.SeriesCollection[i].SetData (OWC11.ChartDimensionsEnum.chDimValues,(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral,data_al[i+1].ToArray());
}
//输出成GIF文件
string strAbsolutePath ="\\test.gif";
objCSpace.ExportPicture(strAbsolutePath, "GIF",chartWidth,chartHeight);
//创建GIF文件的相对路径.
string strImageTag = "<IMG SRC='" + "./test.gif" + "'/>";
return strImageTag;
}

解决方案 »

  1.   

    string strAbsolutePath = Server.MapPath("./") + "test.gif";
    objCSpace.ExportPicture(strAbsolutePath, "GIF",chartWidth,chartHeight);string strImageTag = "<IMG SRC='" + "test.gif" + "'/>";
    return strImageTag;
      

  2.   

    我试过加Server.MapPath(".") ,也试过孟子的原文(http://dotnet.aspx.cc/ShowDetail.aspx?id=ADB6D011-A4AD-43A0-A8BF-3CED872A7A95),都如下提示:
    拒绝访问。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Runtime.InteropServices.COMException: 拒绝访问。源错误: 行 126:  //string strAbsolutePath ="\\test.gif";
    行 127:  string strAbsolutePath = Server.MapPath("./") + "test.gif";
    行 128:  objCSpace.ExportPicture(strAbsolutePath, "GIF",chartWidth,chartHeight);
    行 129: //创建GIF文件的相对路径.
    行 130: string strImageTag = "<IMG SRC='" + "test.gif" + "'/>";
    行 128错误!!!!!!!!拒绝访问
    大哥大姐帮帮我呀
      

  3.   

    我在128行加了断点,局部变量如下:
    strSeriesName "图例 1"                                     string
    strCategory "1\t2\t3\t4\t5\t6\t"                   string
    strValue          "9\t8\t4\t10\t12\t6\t"                   string
    strAbsolutePath @"D:\workspace\webapps\eninfo\test.gif" string
    strRelativePath null                                      string
    strImageTag null                                      string
    这是孟子的原文,应该没问题的,从我的断点变量看也应该没问题,为什么到128行就拒绝访问呢??
      

  4.   

    D:\workspace\webapps\eninfo\test.gif"给D:\workspace\webapps\eninfo 文件夹添加"ASPNET"账户并给予完全控制权限
      

  5.   

    如果操作系统是windows 2003(IIS6.0) 还要给该文件夹添加“IIS_WPG“组并给予其完全控制权限
      

  6.   

    谢谢Jarod(),是文件夹权限问题,不知道添加权限后,会不会有安全隐患?