owc组件使用(统计分析图)

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " _ReportOwc.aspx.cs "  Inherits = " _ReportOwc "   %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml"   >
< head  runat ="server" >
    
< title > 无标题页 </ title >
< link  href ="../images/xj_style.css"  _fcksavedurl ="" ../images/xj_style.css"" _fcksavedurl ="" ../images/xj_style.css"" rel ="stylesheet"  type ="text/css"   />  
     
< script  language ="javascript"  src ="../System_Web_Resources.js"  type ="text/css" ></ script >    
</ head >
< body  onload ="parent.window.document.all.myiframe.style.height=document.body.scrollHeight+10;" >
    
< form  id ="form1"  runat ="server" >
        
< table  style ="width: 100%"  id ="TABLE2"  runat ="server" >
            
< tr >
                
< td  align ="center"  colspan ="1"  rowspan ="1"  style ="height: 23px; width: 949px;"  valign ="top" >
        
< table  id ="Table4"  border ="0"  cellpadding ="0"  cellspacing ="0"  width ="98%" >
            
< tr >
                
< td  align ="left"  style ="height: 43px"  valign ="bottom"  width ="40%" >
                    
< table  id ="Table5"  border ="0"  cellpadding ="0"  cellspacing ="0"  style ="border-bottom: #ffffff 1px solid" >
                        
< tr >
                            
< td  class ="lmstyle" >
                                
< img  align ="Middle"  height ="20"  src ="../images/blacksjbiao_big.gif"  width ="15"   /> &nbsp;
                                
< asp:Label  ID ="LabelMailTitle"  runat ="server"  Font-Size ="14px"  Text ="统计图表" ></ asp:Label ></ td >
                            
< td  align ="left" >
                                
< img  height ="27"  src ="../images/lmtu_right.gif"  width ="27"   /></ td >
                        
</ tr >
                    
</ table >
                
</ td >
                
< td  style ="height: 43px"  width ="60%" >
                    
< div  align ="right" >
                        
< img  height ="41"  src ="../images/index2.gif"  width ="306"   /></ div >
                
</ td >
            
</ tr >
        
</ table >
                
</ td >
            
</ tr >
            
< tr >
                
< td  align ="left"  rowspan ="2"  valign ="top"  style ="width: 949px" >
                
< table  id ="Table1"  border ="0"  cellpadding ="1"  cellspacing ="1"  width ="100%" >
                    
< tr >
                        
< td  style ="height: 24px" >
                            选择时间段:
< asp:DropDownList  ID ="DropDownList2"  runat ="server" >
                            
</ asp:DropDownList >
                            
< asp:DropDownList  ID ="DropDownList3"  runat ="server" >
                            
</ asp:DropDownList >
                            
< asp:DropDownList  ID ="DropDownList4"  runat ="server" >
                            
</ asp:DropDownList >
                            
< asp:DropDownList  ID ="DropDownList5"  runat ="server" >
                            
</ asp:DropDownList > &nbsp;  
                            
< asp:Button  ID ="btnSelect"  runat ="server"  OnClick ="btnSelect_Click"  Text ="检索"  CssClass ="xjbutton1"   /> &nbsp;&nbsp;
                            选择图表类型:
                            
< asp:DropDownList  ID ="_DropDownListtype"  runat ="server"  AutoPostBack ="True"  OnSelectedIndexChanged ="DropDownList_SelectedIndexChanged" >
                            
</ asp:DropDownList > &nbsp;   &nbsp;
                            
< asp:Button  ID ="Button3"  runat ="server"  Text ="绘制饼图"  OnClick ="Button3_Click"  Visible ="False"  CssClass ="xjbutton1"   />
                            
< asp:Button  ID ="Button2"  runat ="server"  Text ="绘制条状图"  OnClick ="Button2_Click"  Visible ="False"  CssClass ="xjbutton1"   />
                            
< asp:Button  ID ="Button1"  runat ="server"  OnClick ="Button1_Click"  Text ="绘制柱状图"  Visible ="False"  CssClass ="xjbutton1"   /></ td >
                    
</ tr >
                
</ table >
                
</ td >
            
</ tr >
            
< tr >
            
</ tr >
            
< tr >
                
< td  align ="center"  valign ="top"  style ="width: 949px; height: 32px" >
                
< asp:Image  ID ="Image1"  runat ="server"   /></ td >
            
</ tr >
        
</ table >
      
            
< font  face ="宋体" >
                
< asp:TreeView  ID ="TreeView1"  runat ="server"  Visible ="False" >
                    
< Nodes >
                        
< asp:TreeNode  Text ="简单检索"  Value ="0" ></ asp:TreeNode >
                    
</ Nodes >
                
</ asp:TreeView >
                
</ font >
    
</ form >
</ body >
</ html >


using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Data;
using  System.Data.SqlClient;
using  System.Drawing;
using  System.Web;
using  System.Web.SessionState;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.HtmlControls;
using  Microsoft.Office.Interop.Owc11;
using  System.Text; 

public   partial   class  _ReportOwc : System.Web.UI.Page
{
    MyCRM.DB db 
=   new  MyCRM.DB();  
 ChartFactory chartFactory
= new  ChartFactory();  
 DataTable dt
= new  DataTable();
    DataTable treetable 
=   new  DataTable(); 
 OWCChart11  chart 
=   new  OWCChart11();
 
string  filepath  = ""
 
public   static  Hashtable chartMap  =   new  Hashtable();

    
string  type  =   " dept " ;
    
string  sql  =   " select d.name,count(d.name) from person p join dept d on d.id=p.dept where person_state='正常' group by d.name " ;
 
public   void  Page_Load( object  sender, System.EventArgs e)
 {       
        dt 
=  db.ececSelectSql( " select top 50 person.truename,wage.薪资 from person left join wage on person.id=wage.员工姓名 " ); 
  filepath
=  Server.MapPath( " . " +   " \\ChartImages " ;
  Image1.ImageUrl
= "" ;
  InitTypeMap();

        treetable 
=  db.ececSelectSql( " select col_name,show_name from tablestruct where table_name='person' order by [id] " );
       
  
//  在此处放置用户代码以初始化页面
   #region  按钮绘制图形
  chart.Title 
=   " 标题 " ;
  chart.SeriesName 
=   " 图例 " ;
  
  chart.PhaysicalImagePath 
=  filepath;
  chart.PicHight 
=   320 ;
  chart.PicWidth 
=   500 ;
  chart.DataSource 
=  dt; // 这是你的数据源
#endregion
        
if  ( ! IsPostBack)
        {
            deleteFile();           
            
// 默认绘制            
             for  ( int  i  =   1 ; i  <   13 ; i ++ )
            {
                ListItem item 
=   new  ListItem();
                item.Text 
=  Convert.ToString(DateTime.Now.Year - i) + " " ;
                item.Value 
=  Convert.ToString(DateTime.Now.Year - i);
                DropDownList2.Items.Add(item);
                DropDownList4.Items.Add(item);

                item 
=   new  ListItem();
                item.Text 
=  Convert.ToString(i)  +   " " ;
                item.Value 
=  Convert.ToString(i);
                DropDownList3.Items.Add(item);
                DropDownList5.Items.Add(item);
            }           
        }

        
if  (Request.QueryString[ " type " !=   null )
        {
            type 
=  Request.QueryString[ " type " ].ToString().Trim();
            
// Response.Write(type);
        }
        
else  
        {
            type 
=   " dept " ;
        }

        
switch  (type)
        {
            
case   " post " : // 职务
                sql  =   " select d.post,count(d.post) from person p join post d on d.id=p.post where person_state='正常' group by d.post " ;
                
break ;
            
case   " dept " : // 部门
                sql  =   " select d.name,count(d.name) from person p join dept d on d.id=p.dept where person_state='正常' group by d.name " ;
                
break ;
            
case   " sex " : // 性别
                sql  =   " select sex,count(sex) from person where person_state='正常' group by sex " ;
                
break ;
            
case   " PoliticsVisage " : // 政治面貌
                sql  =   " select PoliticsVisage,count(PoliticsVisage) from person where person_state='正常' group by PoliticsVisage " ;
                
break ;
            
case   " person_state " : // 员工状态
                sql  =   " select [person_state],count([person_state]) from person  group by [person_state] " ;
                
break ;
            
default :
                
break ;
        }
        DropDownList_SelectedIndexChanged(sender, e);
 }

    
public   void  deleteFile()
 {
        
string [] strFileName = System.IO.Directory.GetFiles(Server.MapPath( " . " ) + @" \ChartImages\ " );
  
for ( int  i = 0 ;i < strFileName.Length;i ++ )
  {     
   System.IO.FileInfo file
= new  System.IO.FileInfo(strFileName[i]);
   
string  strtemp = file.Name.Split( ' . ' )[ 0 ];
            
if  (strtemp.Length  >   8 )
            {               
                strtemp 
=  strtemp.Substring( 0 4 +   " - "   +  strtemp.Substring( 4 2 +   " - "   +  strtemp.Substring( 6 2 );
                
if  (Convert.ToDateTime(strtemp)  <  DateTime.Now.AddDays( - 1 ))
                {
                    
if  (file.Exists)
                    {
                        file.Delete();
                    }
                }
            }
  }  
 }
    
public   void  InitTypeMap()
    {
        chartMap.Clear();
        
string  str  =   "" ;
        
if  (_DropDownListtype.Items.Count  >   0 )
        {
            str 
=  _DropDownListtype.SelectedItem.Text;
        }

        _DropDownListtype.Items.Clear();
        Microsoft.Office.Interop.Owc11.ChartChartTypeEnum[] chartTypes 
=   new  Microsoft.Office.Interop.Owc11.ChartChartTypeEnum[]{ ChartChartTypeEnum.chChartTypeColumnClustered,
                      ChartChartTypeEnum.chChartTypeColumn3D,
                      ChartChartTypeEnum.chChartTypeBarClustered,
                      ChartChartTypeEnum.chChartTypeBar3D,
                      ChartChartTypeEnum.chChartTypeArea,
                      ChartChartTypeEnum.chChartTypeArea3D,
                      ChartChartTypeEnum.chChartTypeDoughnut,
                      ChartChartTypeEnum.chChartTypeLineStacked,
                      ChartChartTypeEnum.chChartTypeLine3D,
                      ChartChartTypeEnum.chChartTypeLineMarkers,
                      ChartChartTypeEnum.chChartTypePie,
                      ChartChartTypeEnum.chChartTypePie3D,
                      ChartChartTypeEnum.chChartTypeRadarSmoothLine,
                      ChartChartTypeEnum.chChartTypeSmoothLine};
        
string [] chartTypesCh  =   new   string [] {  " 垂直柱状统计图 " " 3D垂直柱状统计图 " " 水平柱状统计图 " " 3D水平柱状统计图 " " 区域统计图 " " 3D区域统计图 " " 中空饼图 " " 折线统计图 " " 3D折线统计图 " " 折线带点统计图 " " 饼图 " " 3D饼图 " " 网状统计图 " " 弧线统计图 "  };

        
for  ( int  i  =   0 ; i  <  chartTypes.Length; i ++ )
        {
            chartMap.Add(chartTypesCh[i], chartTypes[i]);
        }

        
for  ( int  i  =   0 ; i  <  chartTypes.Length; i ++ )
        {
            ListItem ii 
=   new  ListItem(chartTypesCh[i]);
            _DropDownListtype.Items.Add(ii);
        }
        
foreach  (ListItem ii  in  _DropDownListtype.Items)
        {
            
if  (ii.Text  ==  str)
            {
                ii.Selected 
=   true ;
            }
        }
    }

    
#region  按钮事件
    
public   void  Button1_Click( object  sender, System.EventArgs e)
    {
        
this .Image1.ImageUrl  =   @" .\ChartImages\ "   +  chart.CreateColumn(); // 显示给图像控件。
    }

    
public   void  Button2_Click( object  sender, System.EventArgs e)
    {
        
this .Image1.ImageUrl  =   @" .\ChartImages\ "   +  chart.CreateBar(); // 显示给图像控件。
    }

    
public   void  Button3_Click( object  sender, System.EventArgs e)
    {
        
this .Image1.ImageUrl  =   @" .\ChartImages\ "   +  chart.CreatePie(); // 显示给图像控件。
    }
    
// 按钮绘制类
     public   class  OWCChart11
    {

        
#region  属性
        
public   string  _phaysicalimagepath;
        
public   string  _title;
        
public   string  _seriesname;
        
public   int  _picwidth;
        
public   int  _pichight;
        
public  DataTable _datasource;
        
public   string  strCategory;
        
public   string  strValue;

        
///   <summary>
        
///  图片存放路径
        
///   </summary>
         public   string  PhaysicalImagePath
        {
            
set  { _phaysicalimagepath  =  value; }
            
get  {  return  _phaysicalimagepath; }
        }
        
///   <summary>
        
///  图片标题
        
///   </summary>
         public   string  Title
        {
            
set  { _title  =  value; }
            
get  {  return  _title; }
        }
        
///   <summary>
        
///  图片说明
        
///   </summary>
         public   string  SeriesName
        {
            
set  { _seriesname  =  value; }
            
get  {  return  _seriesname; }
        }
        
///   <summary>
        
///  图片宽度
        
///   </summary>
         public   int  PicWidth
        {
            
set  { _picwidth  =  value; }
            
get  {  return  _picwidth; }
        }
        
///   <summary>
        
///  图片高度
        
///   </summary>
         public   int  PicHight
        {
            
set  { _pichight  =  value; }
            
get  {  return  _pichight; }
        }
        
///   <summary>
        
///  图片数据源
        
///   </summary>
         public  DataTable DataSource
        {
            
set
            {
                _datasource 
=  value;
                strCategory 
=  GetColumnsStr(_datasource);
                strValue 
=  GetValueStr(_datasource);
            }
            
get  {  return  _datasource; }
        }
        
///   <summary>
        
///  列类型
        
///   </summary>
         public   string  GetColumnsStr(DataTable dt)
        {
            StringBuilder strList 
=   new  StringBuilder();
            
foreach  (DataRow r  in  dt.Rows)
            {
                strList.Append(r[
0 ].ToString()  +   ' \t ' );
            }
            
return  strList.ToString();
        }
        
///   <summary>
        
///  列值
        
///   </summary>
         public   string  GetValueStr(DataTable dt)
        {
            StringBuilder strList 
=   new  StringBuilder();
            
foreach  (DataRow r  in  dt.Rows)
            {
                strList.Append(r[
1 ].ToString()  +   ' \t ' );
            }
            
return  strList.ToString();
        }

        
#endregion


        
public  OWCChart11()
        {
        }
        
public  OWCChart11( string  PhaysicalImagePath,  string  Title,  string  SeriesName)
        {
            _phaysicalimagepath 
=  PhaysicalImagePath;
            _title 
=  Title;
            _seriesname 
=  SeriesName;
        }


        
///   <summary>
        
///  柱形图
        
///   </summary>
        
///   <returns></returns>
         public   string  CreateColumn()
        {
            Microsoft.Office.Interop.Owc11.ChartSpace objCSpace 
=   new  Microsoft.Office.Interop.Owc11.ChartSpaceClass(); // 创建ChartSpace对象来放置图表   
            Microsoft.Office.Interop.Owc11.ChChart objChart  =  objCSpace.Charts.Add( 0 ); // 在ChartSpace对象中添加图表,Add方法返回chart对象

            
// 指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到 // Microsoft.Office.Interop.OWC.ChartChartTypeEnum
            
// objChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;

            objChart.Type 
=  Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;
            
// 指定图表是否需要图例
            objChart.HasLegend  =   true ;

            
// 标题
            objChart.HasTitle  =   true ;
            objChart.Title.Caption 
=  _title;
            objChart.Title.Font.Bold 
=   true ;
            objChart.Title.Font.Color 
=   " blue " ;

            
#region  样式设置

            
// 旋转
            objChart.Rotation  =   360 ; // 表示指定三维图表的旋转角度
            objChart.Inclination  =   10 ; // 表示指定三维图表的视图斜率。有效范围为 -90 到 90

            
// 背景颜色
            objChart.PlotArea.Interior.Color  =   " yellow " ;

            
// 底座颜色
            objChart.PlotArea.Floor.Interior.Color  =   " green " ;

            objChart.Overlap 
=   50 ; // 单个类别中标志之间的重叠量

            
#endregion

            
// x,y轴的图示说明
            objChart.Axes[ 0 ].HasTitle  =   true ;
            objChart.Axes[
0 ].Title.Caption  =   " X : 类别 " ;
            objChart.Axes[
1 ].HasTitle  =   true ;
            objChart.Axes[
1 ].Title.Caption  =   " Y : 数量 " ;


            
// 添加一个series
            Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries  =  objChart.SeriesCollection.Add( 0 );

            
// 给定series的名字
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
                Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), SeriesName);
            
// 给定分类
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
                Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory);
            
// 给定值
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
                Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);

            Microsoft.Office.Interop.Owc11.ChDataLabels dl 
=  objChart.SeriesCollection[ 0 ].DataLabelsCollection.Add();
            dl.HasValue 
=   true ;
            
//    dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;


            
string  filename  =  DateTime.Now.ToString( " yyyyMMddHHmmssff " +   " .gif " ;
            
string  strAbsolutePath  =  _phaysicalimagepath  +   " \\ "   +  filename;
            objCSpace.ExportPicture(strAbsolutePath, 
" GIF " , _picwidth, _pichight); // 输出成GIF文件.

            
return  filename;

        }


        
///   <summary>
        
///  饼图
        
///   </summary>
        
///   <returns></returns>
         public   string  CreatePie()
        {
            Microsoft.Office.Interop.Owc11.ChartSpace objCSpace 
=   new  Microsoft.Office.Interop.Owc11.ChartSpaceClass(); // 创建ChartSpace对象来放置图表   
            Microsoft.Office.Interop.Owc11.ChChart objChart  =  objCSpace.Charts.Add( 0 ); // 在ChartSpace对象中添加图表,Add方法返回chart对象


            
// 指定图表的类型
            objChart.Type  =  Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypePie;

            
// 指定图表是否需要图例
            objChart.HasLegend  =   true ;

            
// 标题
            objChart.HasTitle  =   true ;
            objChart.Title.Caption 
=  _title;


            
// 添加一个series
            Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries  =  objChart.SeriesCollection.Add( 0 );

            
// 给定series的名字
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
                Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), SeriesName);
            
// 给定分类
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
                Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory);
            
// 给定值
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
                Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);


            
// 表示系列或趋势线上的单个数据标志
            Microsoft.Office.Interop.Owc11.ChDataLabels dl  =  objChart.SeriesCollection[ 0 ].DataLabelsCollection.Add();
            dl.HasValue 
=   true ;
            dl.HasPercentage 
=   true ;
            
// 图表绘图区的图例放置在右侧。
            
//    dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionRight;

            
string  filename  =  DateTime.Now.ToString( " yyyyMMddHHmmssff " +   " .gif " ;
            
string  strAbsolutePath  =  _phaysicalimagepath  +   " \\ "   +  filename;
            objCSpace.ExportPicture(strAbsolutePath, 
" GIF " , _picwidth, _pichight); // 输出成GIF文件.

            
return  filename;
        }

        
///   <summary>
        
///  条形图
        
///   </summary>
        
///   <returns></returns>
         public   string  CreateBar()
        {
            Microsoft.Office.Interop.Owc11.ChartSpace objCSpace 
=   new  Microsoft.Office.Interop.Owc11.ChartSpaceClass(); // 创建ChartSpace对象来放置图表   
            Microsoft.Office.Interop.Owc11.ChChart objChart  =  objCSpace.Charts.Add( 0 ); // 在ChartSpace对象中添加图表,Add方法返回chart对象

            
// 指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到 // Microsoft.Office.Interop.OWC.ChartChartTypeEnum
            objChart.Type  =  Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeBarClustered;

            
// 指定图表是否需要图例
            objChart.HasLegend  =   true ;

            
// 标题
            objChart.HasTitle  =   true ;
            objChart.Title.Caption 
=  _title;
            objChart.Title.Font.Bold 
=   true ;
            objChart.Title.Font.Color 
=   " blue " ;


            
#region  样式设置

            
//     // 旋转
            objChart.Rotation  =   360 ; // 表示指定三维图表的旋转角度
            objChart.Inclination  =   10 ; // 表示指定三维图表的视图斜率。有效范围为 -90 到 90

            
// 背景颜色
            objChart.PlotArea.Interior.Color  =   " red " ;

            
// 底座颜色
            objChart.PlotArea.Floor.Interior.Color  =   " green " ;

            objChart.Overlap 
=   50 ; // 单个类别中标志之间的重叠量

            
#endregion

            
// x,y轴的图示说明
            objChart.Axes[ 0 ].HasTitle  =   true ;
            objChart.Axes[
0 ].Title.Caption  =   " X : 类别 " ;
            objChart.Axes[
1 ].HasTitle  =   true ;
            objChart.Axes[
1 ].Title.Caption  =   " Y : 数量 " ;


            
// 添加一个series
            Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries  =  objChart.SeriesCollection.Add( 0 );


            
// 给定series的名字
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
                Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), SeriesName);
            
// 给定分类
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
                Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory);
            
// 给定值
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
                Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);

            Microsoft.Office.Interop.Owc11.ChDataLabels dl 
=  objChart.SeriesCollection[ 0 ].DataLabelsCollection.Add();
            dl.HasValue 
=   true ;
            
//    dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;


            
string  filename  =  DateTime.Now.ToString( " yyyyMMddHHmmssff " +   " .gif " ;
            
string  strAbsolutePath  =  _phaysicalimagepath  +   " \\ "   +  filename;
            objCSpace.ExportPicture(strAbsolutePath, 
" GIF " , _picwidth, _pichight); // 输出成GIF文件.

            
return  filename;

        }

    }

    
#endregion

    
#region  下拉框事件

    
public   void  DropDownList_SelectedIndexChanged( object  sender, System.EventArgs e)
    {       
        
string [] chartCategories  =   new   string [ 10 ];
        
string [] chartValues  =   new   string [ 10 ];

        
// Response.Write(sql);
        DataTable ddt = db.ececSelectSql(sql);

        
for  ( int  i  =   0 ; i  <  ddt.Rows.Count; i ++ )
        {
            chartCategories[i] 
=  ddt.Rows[i][ 0 ].ToString();
            chartValues[i] 
=  ddt.Rows[i][ 1 ].ToString();
        }

        chartFactory.chartCategoriesArrValue 
=  chartCategories;
        chartFactory.chartValuesArrValue 
=  chartValues;
        chartFactory.chartTitleValue 
=   " 统计图表 " ;
        chartFactory.chartTypeValue 
=  _DropDownListtype.SelectedItem.Text;
        Microsoft.Office.Interop.Owc11.ChartSpaceClass oChartSpace 
=  chartFactory.BuildCharts();
        
string  filename  =  DateTime.Now.ToString( " yyyyMMddHHmmssff " +   " .png " ;
        
string  path  =  Server.MapPath( " . " +   @" \ChartImages\ "   +  filename;   // 产生图片并保存,还可以是png gif图片
         if  (System.IO.File.Exists(path))
        {
            System.IO.File.Delete(path);
        }
        oChartSpace.ExportPicture(path, 
" png " 470 , 330 );
        Image1.ImageUrl 
=   @" .\ChartImages\ "   +  filename;   //  显示统计图
    }

    
#region  下拉框绘制类
    
public   class  ChartFactory
    {
        
public  ChartFactory()
        {

        }
        
public  System.Web.UI.WebControls.Image imgHondaLineup;
        
public   string [] chartCategoriesArr;
        
public   string [] chartValuesArr;
        
public  Microsoft.Office.Interop.Owc11.ChartChartTypeEnum chartType  =  Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumn3D; // 默认值
         public   static   string  chartTypeCh  =   " 垂直柱状图 " ;
        
public   static   string  chartTitle  =   "" ;

        
public  Microsoft.Office.Interop.Owc11.ChartSpaceClass BuildCharts()
        {
            
string  chartCategoriesStr  =  String.Join( " \t " , chartCategoriesArr);
            
string  chartValuesStr  =  String.Join( " \t " , chartValuesArr);

            Microsoft.Office.Interop.Owc11.ChartSpaceClass oChartSpace 
=   new  Microsoft.Office.Interop.Owc11.ChartSpaceClass();

            
int  ii  =  chartMap.Count;
            chartType 
=  (ChartChartTypeEnum)chartMap[chartTypeCh];

            
if  (chartType  ==  ChartChartTypeEnum.chChartTypePie  ||
                chartType 
==  ChartChartTypeEnum.chChartTypePie3D  ||
                chartType 
==  ChartChartTypeEnum.chChartTypeDoughnut)
            {
                oChartSpace.HasChartSpaceLegend 
=   true ;
                oChartSpace.ChartSpaceLegend.Position 
=  ChartLegendPositionEnum.chLegendPositionBottom;
            }

            oChartSpace.Border.Color 
=   " blue " ;
            oChartSpace.Charts.Add(
0 );
            oChartSpace.Charts[
0 ].HasTitle  =   true ;
            oChartSpace.Charts[
0 ].Type  =  chartType;
            oChartSpace.Charts[
0 ].ChartDepth  =   125 ;
            oChartSpace.Charts[
0 ].AspectRatio  =   80 ;
            oChartSpace.Charts[
0 ].Title.Caption  =  chartTitle;
            oChartSpace.Charts[
0 ].Title.Font.Bold  =   true ;

            oChartSpace.Charts[
0 ].SeriesCollection.Add( 0 );
            oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection.Add();

            
if  (chartType  ==  ChartChartTypeEnum.chChartTypePie  ||
                chartType 
==  ChartChartTypeEnum.chChartTypePie3D  ||
                chartType 
==  ChartChartTypeEnum.chChartTypeDoughnut)
            {
                
// oChartSpace.Charts[0].HasLegend = true;
                oChartSpace.Charts[ 0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].HasPercentage  =   true  ;
                oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].HasValue  =   false ;
            }
            
else
            {
                oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].HasPercentage  =   false ;
                oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].HasValue  =   true ;
            }

            oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].Caption  =  String.Empty;
            oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].Font.Name  =   " verdana " ;
            oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].Font.Size  =   10 ;
            oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].Font.Bold  =   false ;
            oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].Font.Color  =   " red " ;
            oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].Position  =  ChartDataLabelPositionEnum.chLabelPositionCenter;

            
if  (chartType  ==  ChartChartTypeEnum.chChartTypeBarClustered  ||
                chartType 
==  ChartChartTypeEnum.chChartTypeBar3D  ||
                chartType 
==  ChartChartTypeEnum.chChartTypeColumnClustered  ||
                chartType 
==  ChartChartTypeEnum.chChartTypeColumn3D)
            {
                oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].Position  =  ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
            }

            oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
                Convert.ToInt32(Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral), chartCategoriesStr);

            oChartSpace.Charts[
0 ].SeriesCollection[ 0 ].SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
                Convert.ToInt32(Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral), chartValuesStr);

            
return  oChartSpace;
        }

        
#region   属性设置
        
public   string [] chartCategoriesArrValue
        {
            
get
            {
                
return  chartCategoriesArr;
            }
            
set
            {
                chartCategoriesArr 
=  value;
            }
        }

        
public   string [] chartValuesArrValue
        {
            
get
            {
                
return  chartValuesArr;
            }
            
set
            {
                chartValuesArr 
=  value;
            }
        }
        
public   string  chartTypeValue
        {
            
get
            {
                
return  chartTypeCh;
            }
            
set
            {
                chartTypeCh 
=  value;
            }
        }
        
public   string  chartTitleValue
        {
            
get
            {
                
return  chartTitle;
            }
            
set
            {
                chartTitle 
=  value;
            }
        }
        
#endregion
    }
#endregion
    
#endregion

    
protected   void  TreeView1_SelectedNodeChanged( object  sender, EventArgs e)
    {
        TreeView1.SelectedNodeStyle.BackColor 
=  System.Drawing.Color.PaleGoldenrod; 
    }
    
protected   void  btnSelect_Click( object  sender, EventArgs e)
    {
        DropDownList_SelectedIndexChanged(sender, e);
    }
}


 參考: http://www.cnblogs.com/pincelee/archive/2007/07/28/834604.html

转载于:https://www.cnblogs.com/Athrun/archive/2008/05/20/1203145.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值