| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648 | using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Collections;using DataDynamics.ActiveReports.Export.Xls;using DataDynamics.ActiveReports.Export.Pdf;using System.Threading;namespace IControls_FireManager{    //    // 엑티브레포트 뷰어를 제공합니다. 실제로 데이타는 각 폼에 따라 다르므로 뷰어는 UI 만 신경쓰면 됩니다    // XLS,PDF 버튼은 동적으로 생성합니다.    //    public partial class Form_ActiveReport_Viewer : Form    {        // 레포트 정보를 생성시 진행팝업창        public Form Popup_ReportCreate_Progress = new Form();        // 생성자        public void Initialize()        {            // 컴포넌트 초기화            InitializeComponent();            // 툴바에 메뉴 추가            this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());            this.viewer_Report.Toolbar.ToolStrip.Items.Add("엑셀 내보내기");            this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());            this.viewer_Report.Toolbar.ToolStrip.Items.Add("PDF 내보내기");            ///            /// 이벤트            ///             // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)            this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);            // 윈도우 스타일 변경 이벤트 핸들러 등록            _Event.WindowStyleSet_SendMessage_Event += new _Event.WindowStyleSet_SendMessage_Handler(_Event_WindowStyleSet_SendMessage_Event);            // 툴바에 등록            this.viewer_Report.Toolbar.ToolStrip.Items[25].Click += new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);            this.viewer_Report.Toolbar.ToolStrip.Items[27].Click += new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);            ///            /// 스타일 변경            ///             UI_Style_Initialize();            // 프로그램 실행중 한번만 실행하도록 만듬            _Data.ActiveReportViewer_Enable = true;        }        // 레포트 (데이타베이스 쿼리 결과를 곧바로 받아서 전체 작업개수를 파악하지 않으며 가변 혹은 고정으로 출력되는 레포트)        public Form_ActiveReport_Viewer(            // 레포트 타입            ACTIVE_REPORT_DATA DATA_TYPE,            // 쿼리 결과 데이타. 즉 실제로 레포트에 출력할 데이타를 전달받음              object ResultData,            // 컬럼 텍스트명 및 길이 추출정보필드            // 가변레포트 : _Report_Column_Info 타입의 클래스의 리스트 정보            // 고정레포트 : 해당레포트포맷을 참조해서 인덱서로 구성된 클래스의 리스트 정보            ArrayList Column_Info,            // 제목            string Title,            // 개요            string Summary,            // 컬럼 높이 (가변레포트에서만 사용)            float ColumnHeight,            // 폰트 사이즈 (가변레포트에서만 사용)            int FontSize)        {            Initialize();            // 총 개수            int All_ProcessCount = _ActiveReport.Get_All_ProcessCount(ResultData);            // 결과가 없다면 실행안함            if (ResultData == null || All_ProcessCount == 0) return;            // 기존의 팝업창 종료            if (Popup_ReportCreate_Progress != null) _Crossthread.Form_Close(Popup_ReportCreate_Progress);            // 레포트 생성중입니다. 프로그레스 팝업창            Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Progress, Popup_Style.Normal, _Text.OK, 250, 200, _Text.ReportCreateProgress, All_ProcessCount);            // 기존 스레드 종료            _Thread.Abort("ACTIVE_REPORT_DATA");            // 레포트 타입에 따라 폼이 결정된다            object Report = null;            switch (DATA_TYPE)            {                //                // 가변레포트                //                case ACTIVE_REPORT_DATA.VARIABLE_HEIGHT:                    Report = new ActiveReport_Variable_Height(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);                    break;                case ACTIVE_REPORT_DATA.VARIABLE_WIDTH:                    Report = new ActiveReport_Variable_Width(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);                    break;                //                // 고정레포트                //                 case ACTIVE_REPORT_DATA.OPER_GROUP:                    Report = new ActiveReport_OperGroup(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);                    break;                case ACTIVE_REPORT_DATA.OPER_SET:                    Report = new ActiveReport_OperSet(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);                    break;                case ACTIVE_REPORT_DATA.PAGE:                    Report = new ActiveReport_Page(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);                    break;                            }            // 레포트 문서에다 실제 데이타를 출력하는 스레드 실행            if (Report != null)            {                this.viewer_Report.Document = ((DataDynamics.ActiveReports.ActiveReport)Report).Document;                _Thread.Create("ACTIVE_REPORT_DATA", ActiveReport_DataBinding, Report);            }        }        //        // 레포트 생성 스레드        //        public void ActiveReport_DataBinding(object ActiveReport_Documnet)        {            try            {                // Active Report Document Fetch                 ((DataDynamics.ActiveReports.ActiveReport)ActiveReport_Documnet).Run();            }            catch (Exception e)            {                _Thread.Abort("ACTIVE_REPORT_DATA");                _Event.DebugView_SendMessage_Write(e.ToString());            }        }        // set  active report class : 혹시 외부에서 접근가능할 루틴이 필요하다면 사용        public DataDynamics.ActiveReports.Document.Document Document        {            set            {                this.viewer_Report.Document = value;            }        }        // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)        public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)        {            // 기존 스레드 종료            _Thread.Abort("ACTIVE_REPORT_DATA");            // 프로그레스바 진행중에는 닫아 버리면 종료            if (Popup_ReportCreate_Progress != null)            {                _Popup.ProcessPopup_Enable = false;                _Popup.ProcessPopup_Processbar_AllCnt = 0;                _Popup.ProcessPopup_Processbar_Cnt = 0;                Popup_ReportCreate_Progress.Close();            }            // 툴바 클릭 이벤트 핸들러 해제            if (this.viewer_Report.Toolbar.ToolStrip.Items["엑셀 내보내기"] != null)                this.viewer_Report.Toolbar.ToolStrip.Items["엑셀 내보내기"].Click -= new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);            if (this.viewer_Report.Toolbar.ToolStrip.Items["PDF 내보내기"] != null)                this.viewer_Report.Toolbar.ToolStrip.Items["PDF 내보내기"].Click -= new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);            // 윈도우 스타일 변경 이벤트 핸들러 해제            _Event.WindowStyleSet_SendMessage_Event -= new _Event.WindowStyleSet_SendMessage_Handler(_Event_WindowStyleSet_SendMessage_Event);            // 프로그램 실행중 한번만 실행하도록 만듬            _Data.ActiveReportViewer_Enable = false;        }        // 윈도우 스타일 변경 이벤트        public void _Event_WindowStyleSet_SendMessage_Event()        {            UI_Style_Initialize();        }        // 스타일 초기화 함수        private void UI_Style_Initialize()        {        }        //        // 파일 내보내기        //        // XLS 파일로 내보내기        public void Form_ActiveReportViewer_XLS_Export_Click(object sender, EventArgs e)        {            // 다이얼로그 생성            SaveFileDialog SaveFileDialog_XLS = new SaveFileDialog();            // 확장자 넣기            SaveFileDialog_XLS.Filter = "(*.xls)|*.xls";            // 파일 세이브 다이얼로그            if (SaveFileDialog_XLS.ShowDialog() == DialogResult.OK)            {                if (SaveFileDialog_XLS.FileName.Substring(SaveFileDialog_XLS.FileName.Length - 3, 3).ToUpper() == "XLS")                {                    XlsExport DocumentXlsExport = new DataDynamics.ActiveReports.Export.Xls.XlsExport();                    DocumentXlsExport.Export(this.viewer_Report.Document, SaveFileDialog_XLS.FileName);                }            }        }        // PDF 파일로 내보내기        public void Form_ActiveReportViewer_PDF_Export_Click(object sender, EventArgs e)        {            // 다이얼로그 생성            SaveFileDialog SaveFileDialog_PDF = new SaveFileDialog();            // 확장자 넣기            SaveFileDialog_PDF.Filter = "(*.pdf)|*.pdf";            // 파일 세이브 다이얼로그            if (SaveFileDialog_PDF.ShowDialog() == DialogResult.OK)            {                if (SaveFileDialog_PDF.FileName.Substring(SaveFileDialog_PDF.FileName.Length - 3, 3).ToUpper() == "PDF")                {                    PdfExport DocumentPdfExport = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();                    DocumentPdfExport.Export(this.viewer_Report.Document, SaveFileDialog_PDF.FileName);                }            }        }    }    /*    public partial class Form_ActiveReport_Viewer : Form    {        // 레포트 정보를 생성시 진행팝업창        public Form Popup_ReportCreate_Progress = new Form();                public int Popup_ReportCreate_Progress_Count_End = 0; // 최종카운트        // 레포트 문서 (엑티브 레포트 실제 클래스)        ActiveReport_OperGroup OperGroup = null;        ActiveReport_OperSet OperSet = null;        // 수신기 아이디        public string TEMP_RECEIVER_ID = null;        // 스레드 종료를 알리는 이벤트        public delegate void ThreadEnd_SendMessage_Handler(int AllWorkCount, ACTIVE_REPORT_DATA DATA_TYPE);        public event ThreadEnd_SendMessage_Handler ThreadEnd_SendMessage_Event;        public void ThreadEnd_SendMessage_Write(int AllWorkCount, ACTIVE_REPORT_DATA DATA_TYPE)        {            if (ThreadEnd_SendMessage_Event != null)            { ThreadEnd_SendMessage_Event(AllWorkCount, DATA_TYPE); }        }        // 생성자 공통부        public void Initialize()        {            // 컴포넌트 초기화            InitializeComponent();            // 툴바에 메뉴 추가            this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());            this.viewer_Report.Toolbar.ToolStrip.Items.Add("엑셀 내보내기");            this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());            this.viewer_Report.Toolbar.ToolStrip.Items.Add("PDF 내보내기");            ///            /// 이벤트            ///             // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)            this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);            // 툴바에 등록            this.viewer_Report.Toolbar.ToolStrip.Items[25].Click += new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);            this.viewer_Report.Toolbar.ToolStrip.Items[27].Click += new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);            ///            /// 스타일 변경            ///             // 프로그램 실행중 한번만 실행하도록 만듬            _Data.ActiveReportViewer_Enable = true;        }        //        // 생성자 (기존 타입 과 신규 추가한 가변 레포트용 생성자가 존재한다)        //        public Form_ActiveReport_Viewer(            string RECEIVER_ID,             ACTIVE_REPORT_DATA DATA_TYPE)        {            // 컴포넌트 초기화            InitializeComponent();            // 레포트 데이타 처리의 총개수를 알아내는 스레드 종료하는 이벤트 핸들러 등록            this.ThreadEnd_SendMessage_Event += new ThreadEnd_SendMessage_Handler(Form_ActiveReportViewer_ThreadEnd_SendMessage_Event);            // 수신기 아이디 저장            TEMP_RECEIVER_ID = RECEIVER_ID;            // 레포트 타입 지정            Create_ActiveReportData(DATA_TYPE);            // 툴바에 메뉴 추가            this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());            this.viewer_Report.Toolbar.ToolStrip.Items.Add("엑셀 내보내기");            this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());            this.viewer_Report.Toolbar.ToolStrip.Items.Add("PDF 내보내기");            // 툴바에 등록            this.viewer_Report.Toolbar.ToolStrip.Items[25].Click += new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);            this.viewer_Report.Toolbar.ToolStrip.Items[27].Click += new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);        }        public Form_ActiveReport_Viewer(            ACTIVE_REPORT_DATA DATA_TYPE,            object ResultData,          // 쿼리 결과 데이타. 즉 실제로 레포트에 출력할 데이타를 전달받음                        ArrayList Column_Info,      // 컬럼 텍스트명 및 길이 추출정보필드 , _Report_Column_Info 타입의 클래스의 리스트 정보            string Title,               // 제목            string Summary,             // 개요            float ColumnHeight,         // 컬럼 높이             int FontSize)        {            Initialize();            // 총 개수            int All_ProcessCount = _ActiveReport.Get_All_ProcessCount(ResultData);            // 결과가 없다면 실행안함            if (ResultData == null || All_ProcessCount == 0) return;            // 기존의 팝업창 종료            if (Popup_ReportCreate_Progress != null) _Crossthread.Form_Close(Popup_ReportCreate_Progress);            // 레포트 생성중입니다. 프로그레스 팝업창            Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Progress, Popup_Style.Normal, _Text.OK, 250, 200, _Text.ReportCreateProgress, All_ProcessCount);            // 기존 스레드 종료            _Thread.Abort("ACTIVE_REPORT_DATA");            // 레포트 타입에 구분되어 실행            switch (DATA_TYPE)            {                case ACTIVE_REPORT_DATA.VARIABLE_HEIGHT:                    ActiveReport_Variable_Height Report_ActiveReport_Variable_Height =                        new ActiveReport_Variable_Height(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);                    this.viewer_Report.Document = Report_ActiveReport_Variable_Height.Document;                    _Thread.Create("ACTIVE_REPORT_DATA", ActiveReport_DataBinding, Report_ActiveReport_Variable_Height);                    break;                case ACTIVE_REPORT_DATA.VARIABLE_WIDTH:                    ActiveReport_Variable_Width Report_ActiveReport_Variable_Width =                        new ActiveReport_Variable_Width(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);                    this.viewer_Report.Document = Report_ActiveReport_Variable_Width.Document;                    _Thread.Create("ACTIVE_REPORT_DATA", ActiveReport_DataBinding, Report_ActiveReport_Variable_Width);                    break;                            }        }        // set  active report class : 혹시 외부에서 접근가능할 루틴이 필요하다면 사용        public DataDynamics.ActiveReports.Document.Document Document        {             set            {                this.viewer_Report.Document = value;            }        }        // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)        public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)        {            // 프로그레스바 진행중에는 닫아 버리면 종료            if (Popup_ReportCreate_Progress != null)             {                 _Popup.ProcessPopup_Enable = false;                _Popup.ProcessPopup_Processbar_AllCnt = 0;                _Popup.ProcessPopup_Processbar_Cnt = 0;                Popup_ReportCreate_Progress.Close();             }            // 툴바 클릭 이벤트 핸들러 해제            if(this.viewer_Report.Toolbar.ToolStrip.Items["엑셀 내보내기"] != null)                this.viewer_Report.Toolbar.ToolStrip.Items["엑셀 내보내기"].Click -= new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);            if (this.viewer_Report.Toolbar.ToolStrip.Items["PDF 내보내기"] != null)                this.viewer_Report.Toolbar.ToolStrip.Items["PDF 내보내기"].Click -= new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);                     // 레포트 데이타 처리의 총개수를 알아내는 스레드 종료하는 이벤트 핸들러 해제            this.ThreadEnd_SendMessage_Event -= new ThreadEnd_SendMessage_Handler(Form_ActiveReportViewer_ThreadEnd_SendMessage_Event);            // 프로그램 실행중 한번만 실행하도록 만듬            _Data.ActiveReportViewer_Enable = false;        }               // 데이타 타입에 따라 레포트 문서 타입이 결정됩니다.        public void Create_ActiveReportData(ACTIVE_REPORT_DATA DATA_TYPE)        {            // 레포트 준비중이라는 팝업창을 생성            if (Popup_ReportCreate_Progress != null) _Crossthread.Form_Close(Popup_ReportCreate_Progress);            Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.ReportReady, 0);            // 데이타 처리 개수를 알아내기 위해 스레드로 돌린다            switch (DATA_TYPE)            {                 // 연동 그룹                case ACTIVE_REPORT_DATA.OPER_GROUP:                    {                        Thread WorkingThread_Popup = new Thread(new ThreadStart(Ready_For_AllCnt_OPER_GROUP));                        WorkingThread_Popup.Start();                      }                    break;                // 연동 설정                case ACTIVE_REPORT_DATA.OPER_SET:                    {                        Thread WorkingThread_Popup = new Thread(new ThreadStart(Ready_For_AllCnt_OPER_SET));                        WorkingThread_Popup.Start();                       }                    break;            }        }        //        // 전체 작업개수를 알아내기 위한 스레드        //        // 연동 그룹        public void Ready_For_AllCnt_OPER_GROUP()        {            // 작업량 예상            Popup_ReportCreate_Progress_Count_End = 0;            DataRowCollection DB_TABLE_GROUP_ForPopup = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", TEMP_RECEIVER_ID));            if (DB_TABLE_GROUP_ForPopup != null && DB_TABLE_GROUP_ForPopup.Count != 0)            {                foreach (DataRow GROUP in DB_TABLE_GROUP_ForPopup)                {                    // 그룹                    DataRowCollection DB_TABLE_DETAIL_ForPopup = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Gruop_DeviceTable(GROUP[1].ToString(), TEMP_RECEIVER_ID));                    if (DB_TABLE_DETAIL_ForPopup != null && DB_TABLE_DETAIL_ForPopup.Count != 0)                        Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + DB_TABLE_DETAIL_ForPopup.Count;                    // 디바이스가 하나도 없다면                    if (DB_TABLE_DETAIL_ForPopup.Count == 0)                        Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + 1;                }            }            // 이벤트 발생            ThreadEnd_SendMessage_Write(Popup_ReportCreate_Progress_Count_End, ACTIVE_REPORT_DATA.OPER_GROUP);        }        // 연동 설정        public void Ready_For_AllCnt_OPER_SET()        {            // 작업량 예상            Popup_ReportCreate_Progress_Count_End = 0;            DataRowCollection DB_TABLE_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP", "MAP_ID", TEMP_RECEIVER_ID));            if (DB_TABLE_MAP != null && DB_TABLE_MAP.Count != 0)            {                foreach (DataRow MAP in DB_TABLE_MAP)                {                    // 입력 (디바이스)                    DataRowCollection DB_TABLE_MAP_IN = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(MAP[1].ToString(), "I", TEMP_RECEIVER_ID));                    if (DB_TABLE_MAP_IN != null && DB_TABLE_MAP_IN.Count != 0)                    {                        Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + DB_TABLE_MAP_IN.Count;                                            }                    // 출력 (디바이스)                    DataRowCollection DB_TB_MAP_OUT = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(MAP[1].ToString(), "O", "D", TEMP_RECEIVER_ID));                    if (DB_TB_MAP_OUT != null && DB_TB_MAP_OUT.Count != 0)                    {                        Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + DB_TB_MAP_OUT.Count;                    }                    // 출력 (그룹)                    DataRowCollection DB_MAP_OUT_GROUP = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(MAP[1].ToString(), "O", "G", TEMP_RECEIVER_ID));                    if (DB_MAP_OUT_GROUP != null && DB_MAP_OUT_GROUP.Count != 0)                        foreach (DataRow DETAIL in DB_MAP_OUT_GROUP)                        {                            DataRowCollection DB_TABLE_TB_DEVICE_TYPE = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", DETAIL[5].ToString(), TEMP_RECEIVER_ID));                            if (DB_TABLE_TB_DEVICE_TYPE != null && DB_TABLE_TB_DEVICE_TYPE.Count != 0)                            {                                Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + DB_TABLE_TB_DEVICE_TYPE.Count;                            }                        }                    // 입력 출력이 없는 경우                    if (DB_TABLE_MAP_IN.Count == 0 && DB_TB_MAP_OUT.Count == 0 && DB_MAP_OUT_GROUP.Count == 0)                        Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + 1;                }            }            // 이벤트 발생            ThreadEnd_SendMessage_Write(Popup_ReportCreate_Progress_Count_End, ACTIVE_REPORT_DATA.OPER_SET);        }        // 스레드가 종료되면 호출되는 함수        delegate void CallBack_Form_SetObject(int AllWorkCount, ACTIVE_REPORT_DATA DATA_TYPE);        public void Form_ActiveReportViewer_ThreadEnd_SendMessage_Event(int AllWorkCount, ACTIVE_REPORT_DATA DATA_TYPE)        {            if (this.InvokeRequired)            {                CallBack_Form_SetObject d = new CallBack_Form_SetObject(Form_ActiveReportViewer_ThreadEnd_SendMessage_Event);                this.Invoke(d, new object[] { AllWorkCount, DATA_TYPE });            }            else            {                // 기존의 팝업창을 종료하고 프로그레스바 팝업창으로 재생성                //                if (Popup_ReportCreate_Progress != null) _Crossthread.Form_Close(Popup_ReportCreate_Progress);                 // 작업 데이타가 없다면 경고 문구 출력후 종료                if (AllWorkCount == 0)                {                    Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.NotReportCreateData, 0);                                    }                else                {                    Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Progress, Popup_Style.Normal, _Text.OK, 250, 200, _Text.ReportCreateProgress, AllWorkCount);                                        switch (DATA_TYPE)                    {                        case ACTIVE_REPORT_DATA.OPER_GROUP:                            {                                // 레포트 문서 지정                                   OperGroup = new ActiveReport_OperGroup(TEMP_RECEIVER_ID, Popup_ReportCreate_Progress);                                this.viewer_Report.Document = OperGroup.Document;                                // 실제 레포트 작업 스레드 생성                                                            Thread WorkingThread = new Thread(new ThreadStart(ActiveReport_DataBinding_OperGroup));                                WorkingThread.Start();                            }                            break;                        case ACTIVE_REPORT_DATA.OPER_SET:                            {                                // 레포트 문서 지정                                  OperSet = new ActiveReport_OperSet(TEMP_RECEIVER_ID, Popup_ReportCreate_Progress);                                this.viewer_Report.Document = OperSet.Document;                                // 실제 레포트 작업스레드 생성                                Thread WorkingThread = new Thread(new ThreadStart(ActiveReport_DataBinding_OperSet));                                WorkingThread.Start();                            }                            break;                    }                }            }        }        //        // 레포트 생성 스레드        //        public void ActiveReport_DataBinding_OperGroup()        {            try            {                OperGroup.Run();            }            catch (Exception e)            {                _Event.DebugView_SendMessage_Write(e.ToString());            }        }        public void ActiveReport_DataBinding_OperSet()        {            try            {                OperSet.Run();            }            catch (Exception e)            {                _Event.DebugView_SendMessage_Write(e.ToString());            }        }                public void ActiveReport_DataBinding(object ActiveReport_Documnet)        {            try            {                // Reflection 을 이용해서 타입을 추출                Type ptype = ActiveReport_Documnet.GetType();                // 레포트 실행 (타입별 실행되는 레포트 문서가 틀리다)                   if (ptype == typeof(ActiveReport_Variable_Width))                    ((ActiveReport_Variable_Width)ActiveReport_Documnet).Run();                else if (ptype == typeof(ActiveReport_Variable_Height))                    ((ActiveReport_Variable_Height)ActiveReport_Documnet).Run();            }            catch (Exception e)            {                _Event.DebugView_SendMessage_Write(e.ToString());            }        }        //        // 파일 내보내기        //        // XLS 파일로 내보내기        public void Form_ActiveReportViewer_XLS_Export_Click(object sender, EventArgs e)        {            // 다이얼로그 생성            SaveFileDialog SaveFileDialog_XLS = new SaveFileDialog();            // 확장자 넣기            SaveFileDialog_XLS.Filter = "(*.xls)|*.xls";            // 파일 세이브 다이얼로그            if (SaveFileDialog_XLS.ShowDialog() == DialogResult.OK)            {                if (SaveFileDialog_XLS.FileName.Substring(SaveFileDialog_XLS.FileName.Length - 3, 3).ToUpper() == "XLS")                {                    XlsExport DocumentXlsExport = new DataDynamics.ActiveReports.Export.Xls.XlsExport();                    DocumentXlsExport.Export(this.viewer_Report.Document, SaveFileDialog_XLS.FileName);                }            }           }        // PDF 파일로 내보내기        public void Form_ActiveReportViewer_PDF_Export_Click(object sender, EventArgs e)        {            // 다이얼로그 생성            SaveFileDialog SaveFileDialog_PDF = new SaveFileDialog();            // 확장자 넣기            SaveFileDialog_PDF.Filter = "(*.pdf)|*.pdf";            // 파일 세이브 다이얼로그            if (SaveFileDialog_PDF.ShowDialog() == DialogResult.OK)            {                if (SaveFileDialog_PDF.FileName.Substring(SaveFileDialog_PDF.FileName.Length - 3, 3).ToUpper() == "PDF")                {                    PdfExport DocumentPdfExport = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();                    DocumentPdfExport.Export(this.viewer_Report.Document, SaveFileDialog_PDF.FileName);                }            }        }    }    */}
 |