Form_ActiveReport_Viewer.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Collections;
  10. using DataDynamics.ActiveReports.Export.Xls;
  11. using DataDynamics.ActiveReports.Export.Pdf;
  12. using System.Threading;
  13. namespace IControls_FireManager
  14. {
  15. //
  16. // 엑티브레포트 뷰어를 제공합니다. 실제로 데이타는 각 폼에 따라 다르므로 뷰어는 UI 만 신경쓰면 됩니다
  17. // XLS,PDF 버튼은 동적으로 생성합니다.
  18. //
  19. public partial class Form_ActiveReport_Viewer : Form
  20. {
  21. // 레포트 정보를 생성시 진행팝업창
  22. public Form Popup_ReportCreate_Progress = new Form();
  23. // 생성자
  24. public void Initialize()
  25. {
  26. // 컴포넌트 초기화
  27. InitializeComponent();
  28. // 툴바에 메뉴 추가
  29. this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());
  30. this.viewer_Report.Toolbar.ToolStrip.Items.Add("엑셀 내보내기");
  31. this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());
  32. this.viewer_Report.Toolbar.ToolStrip.Items.Add("PDF 내보내기");
  33. ///
  34. /// 이벤트
  35. ///
  36. // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
  37. this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);
  38. // 윈도우 스타일 변경 이벤트 핸들러 등록
  39. _Event.WindowStyleSet_SendMessage_Event += new _Event.WindowStyleSet_SendMessage_Handler(_Event_WindowStyleSet_SendMessage_Event);
  40. // 툴바에 등록
  41. this.viewer_Report.Toolbar.ToolStrip.Items[25].Click += new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);
  42. this.viewer_Report.Toolbar.ToolStrip.Items[27].Click += new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);
  43. ///
  44. /// 스타일 변경
  45. ///
  46. UI_Style_Initialize();
  47. // 프로그램 실행중 한번만 실행하도록 만듬
  48. _Data.ActiveReportViewer_Enable = true;
  49. }
  50. // 레포트 (데이타베이스 쿼리 결과를 곧바로 받아서 전체 작업개수를 파악하지 않으며 가변 혹은 고정으로 출력되는 레포트)
  51. public Form_ActiveReport_Viewer(
  52. // 레포트 타입
  53. ACTIVE_REPORT_DATA DATA_TYPE,
  54. // 쿼리 결과 데이타. 즉 실제로 레포트에 출력할 데이타를 전달받음
  55. object ResultData,
  56. // 컬럼 텍스트명 및 길이 추출정보필드
  57. // 가변레포트 : _Report_Column_Info 타입의 클래스의 리스트 정보
  58. // 고정레포트 : 해당레포트포맷을 참조해서 인덱서로 구성된 클래스의 리스트 정보
  59. ArrayList Column_Info,
  60. // 제목
  61. string Title,
  62. // 개요
  63. string Summary,
  64. // 컬럼 높이 (가변레포트에서만 사용)
  65. float ColumnHeight,
  66. // 폰트 사이즈 (가변레포트에서만 사용)
  67. int FontSize)
  68. {
  69. Initialize();
  70. // 총 개수
  71. int All_ProcessCount = _ActiveReport.Get_All_ProcessCount(ResultData);
  72. // 결과가 없다면 실행안함
  73. if (ResultData == null || All_ProcessCount == 0) return;
  74. // 기존의 팝업창 종료
  75. if (Popup_ReportCreate_Progress != null) _Crossthread.Form_Close(Popup_ReportCreate_Progress);
  76. // 레포트 생성중입니다. 프로그레스 팝업창
  77. Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Progress, Popup_Style.Normal, _Text.OK, 250, 200, _Text.ReportCreateProgress, All_ProcessCount);
  78. // 기존 스레드 종료
  79. _Thread.Abort("ACTIVE_REPORT_DATA");
  80. // 레포트 타입에 따라 폼이 결정된다
  81. object Report = null;
  82. switch (DATA_TYPE)
  83. {
  84. //
  85. // 가변레포트
  86. //
  87. case ACTIVE_REPORT_DATA.VARIABLE_HEIGHT:
  88. Report = new ActiveReport_Variable_Height(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);
  89. break;
  90. case ACTIVE_REPORT_DATA.VARIABLE_WIDTH:
  91. Report = new ActiveReport_Variable_Width(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);
  92. break;
  93. //
  94. // 고정레포트
  95. //
  96. case ACTIVE_REPORT_DATA.OPER_GROUP:
  97. Report = new ActiveReport_OperGroup(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);
  98. break;
  99. case ACTIVE_REPORT_DATA.OPER_SET:
  100. Report = new ActiveReport_OperSet(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);
  101. break;
  102. case ACTIVE_REPORT_DATA.PAGE:
  103. Report = new ActiveReport_Page(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);
  104. break;
  105. }
  106. // 레포트 문서에다 실제 데이타를 출력하는 스레드 실행
  107. if (Report != null)
  108. {
  109. this.viewer_Report.Document = ((DataDynamics.ActiveReports.ActiveReport)Report).Document;
  110. _Thread.Create("ACTIVE_REPORT_DATA", ActiveReport_DataBinding, Report);
  111. }
  112. }
  113. //
  114. // 레포트 생성 스레드
  115. //
  116. public void ActiveReport_DataBinding(object ActiveReport_Documnet)
  117. {
  118. try
  119. {
  120. // Active Report Document Fetch
  121. ((DataDynamics.ActiveReports.ActiveReport)ActiveReport_Documnet).Run();
  122. }
  123. catch (Exception e)
  124. {
  125. _Thread.Abort("ACTIVE_REPORT_DATA");
  126. _Event.DebugView_SendMessage_Write(e.ToString());
  127. }
  128. }
  129. // set active report class : 혹시 외부에서 접근가능할 루틴이 필요하다면 사용
  130. public DataDynamics.ActiveReports.Document.Document Document
  131. {
  132. set
  133. {
  134. this.viewer_Report.Document = value;
  135. }
  136. }
  137. // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
  138. public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)
  139. {
  140. // 기존 스레드 종료
  141. _Thread.Abort("ACTIVE_REPORT_DATA");
  142. // 프로그레스바 진행중에는 닫아 버리면 종료
  143. if (Popup_ReportCreate_Progress != null)
  144. {
  145. _Popup.ProcessPopup_Enable = false;
  146. _Popup.ProcessPopup_Processbar_AllCnt = 0;
  147. _Popup.ProcessPopup_Processbar_Cnt = 0;
  148. Popup_ReportCreate_Progress.Close();
  149. }
  150. // 툴바 클릭 이벤트 핸들러 해제
  151. if (this.viewer_Report.Toolbar.ToolStrip.Items["엑셀 내보내기"] != null)
  152. this.viewer_Report.Toolbar.ToolStrip.Items["엑셀 내보내기"].Click -= new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);
  153. if (this.viewer_Report.Toolbar.ToolStrip.Items["PDF 내보내기"] != null)
  154. this.viewer_Report.Toolbar.ToolStrip.Items["PDF 내보내기"].Click -= new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);
  155. // 윈도우 스타일 변경 이벤트 핸들러 해제
  156. _Event.WindowStyleSet_SendMessage_Event -= new _Event.WindowStyleSet_SendMessage_Handler(_Event_WindowStyleSet_SendMessage_Event);
  157. // 프로그램 실행중 한번만 실행하도록 만듬
  158. _Data.ActiveReportViewer_Enable = false;
  159. }
  160. // 윈도우 스타일 변경 이벤트
  161. public void _Event_WindowStyleSet_SendMessage_Event()
  162. {
  163. UI_Style_Initialize();
  164. }
  165. // 스타일 초기화 함수
  166. private void UI_Style_Initialize()
  167. {
  168. }
  169. //
  170. // 파일 내보내기
  171. //
  172. // XLS 파일로 내보내기
  173. public void Form_ActiveReportViewer_XLS_Export_Click(object sender, EventArgs e)
  174. {
  175. // 다이얼로그 생성
  176. SaveFileDialog SaveFileDialog_XLS = new SaveFileDialog();
  177. // 확장자 넣기
  178. SaveFileDialog_XLS.Filter = "(*.xls)|*.xls";
  179. // 파일 세이브 다이얼로그
  180. if (SaveFileDialog_XLS.ShowDialog() == DialogResult.OK)
  181. {
  182. if (SaveFileDialog_XLS.FileName.Substring(SaveFileDialog_XLS.FileName.Length - 3, 3).ToUpper() == "XLS")
  183. {
  184. XlsExport DocumentXlsExport = new DataDynamics.ActiveReports.Export.Xls.XlsExport();
  185. DocumentXlsExport.Export(this.viewer_Report.Document, SaveFileDialog_XLS.FileName);
  186. }
  187. }
  188. }
  189. // PDF 파일로 내보내기
  190. public void Form_ActiveReportViewer_PDF_Export_Click(object sender, EventArgs e)
  191. {
  192. // 다이얼로그 생성
  193. SaveFileDialog SaveFileDialog_PDF = new SaveFileDialog();
  194. // 확장자 넣기
  195. SaveFileDialog_PDF.Filter = "(*.pdf)|*.pdf";
  196. // 파일 세이브 다이얼로그
  197. if (SaveFileDialog_PDF.ShowDialog() == DialogResult.OK)
  198. {
  199. if (SaveFileDialog_PDF.FileName.Substring(SaveFileDialog_PDF.FileName.Length - 3, 3).ToUpper() == "PDF")
  200. {
  201. PdfExport DocumentPdfExport = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();
  202. DocumentPdfExport.Export(this.viewer_Report.Document, SaveFileDialog_PDF.FileName);
  203. }
  204. }
  205. }
  206. }
  207. /*
  208. public partial class Form_ActiveReport_Viewer : Form
  209. {
  210. // 레포트 정보를 생성시 진행팝업창
  211. public Form Popup_ReportCreate_Progress = new Form();
  212. public int Popup_ReportCreate_Progress_Count_End = 0; // 최종카운트
  213. // 레포트 문서 (엑티브 레포트 실제 클래스)
  214. ActiveReport_OperGroup OperGroup = null;
  215. ActiveReport_OperSet OperSet = null;
  216. // 수신기 아이디
  217. public string TEMP_RECEIVER_ID = null;
  218. // 스레드 종료를 알리는 이벤트
  219. public delegate void ThreadEnd_SendMessage_Handler(int AllWorkCount, ACTIVE_REPORT_DATA DATA_TYPE);
  220. public event ThreadEnd_SendMessage_Handler ThreadEnd_SendMessage_Event;
  221. public void ThreadEnd_SendMessage_Write(int AllWorkCount, ACTIVE_REPORT_DATA DATA_TYPE)
  222. {
  223. if (ThreadEnd_SendMessage_Event != null)
  224. { ThreadEnd_SendMessage_Event(AllWorkCount, DATA_TYPE); }
  225. }
  226. // 생성자 공통부
  227. public void Initialize()
  228. {
  229. // 컴포넌트 초기화
  230. InitializeComponent();
  231. // 툴바에 메뉴 추가
  232. this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());
  233. this.viewer_Report.Toolbar.ToolStrip.Items.Add("엑셀 내보내기");
  234. this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());
  235. this.viewer_Report.Toolbar.ToolStrip.Items.Add("PDF 내보내기");
  236. ///
  237. /// 이벤트
  238. ///
  239. // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
  240. this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);
  241. // 툴바에 등록
  242. this.viewer_Report.Toolbar.ToolStrip.Items[25].Click += new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);
  243. this.viewer_Report.Toolbar.ToolStrip.Items[27].Click += new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);
  244. ///
  245. /// 스타일 변경
  246. ///
  247. // 프로그램 실행중 한번만 실행하도록 만듬
  248. _Data.ActiveReportViewer_Enable = true;
  249. }
  250. //
  251. // 생성자 (기존 타입 과 신규 추가한 가변 레포트용 생성자가 존재한다)
  252. //
  253. public Form_ActiveReport_Viewer(
  254. string RECEIVER_ID,
  255. ACTIVE_REPORT_DATA DATA_TYPE)
  256. {
  257. // 컴포넌트 초기화
  258. InitializeComponent();
  259. // 레포트 데이타 처리의 총개수를 알아내는 스레드 종료하는 이벤트 핸들러 등록
  260. this.ThreadEnd_SendMessage_Event += new ThreadEnd_SendMessage_Handler(Form_ActiveReportViewer_ThreadEnd_SendMessage_Event);
  261. // 수신기 아이디 저장
  262. TEMP_RECEIVER_ID = RECEIVER_ID;
  263. // 레포트 타입 지정
  264. Create_ActiveReportData(DATA_TYPE);
  265. // 툴바에 메뉴 추가
  266. this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());
  267. this.viewer_Report.Toolbar.ToolStrip.Items.Add("엑셀 내보내기");
  268. this.viewer_Report.Toolbar.ToolStrip.Items.Add(new ToolStripSeparator());
  269. this.viewer_Report.Toolbar.ToolStrip.Items.Add("PDF 내보내기");
  270. // 툴바에 등록
  271. this.viewer_Report.Toolbar.ToolStrip.Items[25].Click += new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);
  272. this.viewer_Report.Toolbar.ToolStrip.Items[27].Click += new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);
  273. }
  274. public Form_ActiveReport_Viewer(
  275. ACTIVE_REPORT_DATA DATA_TYPE,
  276. object ResultData, // 쿼리 결과 데이타. 즉 실제로 레포트에 출력할 데이타를 전달받음
  277. ArrayList Column_Info, // 컬럼 텍스트명 및 길이 추출정보필드 , _Report_Column_Info 타입의 클래스의 리스트 정보
  278. string Title, // 제목
  279. string Summary, // 개요
  280. float ColumnHeight, // 컬럼 높이
  281. int FontSize)
  282. {
  283. Initialize();
  284. // 총 개수
  285. int All_ProcessCount = _ActiveReport.Get_All_ProcessCount(ResultData);
  286. // 결과가 없다면 실행안함
  287. if (ResultData == null || All_ProcessCount == 0) return;
  288. // 기존의 팝업창 종료
  289. if (Popup_ReportCreate_Progress != null) _Crossthread.Form_Close(Popup_ReportCreate_Progress);
  290. // 레포트 생성중입니다. 프로그레스 팝업창
  291. Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Progress, Popup_Style.Normal, _Text.OK, 250, 200, _Text.ReportCreateProgress, All_ProcessCount);
  292. // 기존 스레드 종료
  293. _Thread.Abort("ACTIVE_REPORT_DATA");
  294. // 레포트 타입에 구분되어 실행
  295. switch (DATA_TYPE)
  296. {
  297. case ACTIVE_REPORT_DATA.VARIABLE_HEIGHT:
  298. ActiveReport_Variable_Height Report_ActiveReport_Variable_Height =
  299. new ActiveReport_Variable_Height(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);
  300. this.viewer_Report.Document = Report_ActiveReport_Variable_Height.Document;
  301. _Thread.Create("ACTIVE_REPORT_DATA", ActiveReport_DataBinding, Report_ActiveReport_Variable_Height);
  302. break;
  303. case ACTIVE_REPORT_DATA.VARIABLE_WIDTH:
  304. ActiveReport_Variable_Width Report_ActiveReport_Variable_Width =
  305. new ActiveReport_Variable_Width(Popup_ReportCreate_Progress, ResultData, Column_Info, Title, Summary, ColumnHeight, FontSize);
  306. this.viewer_Report.Document = Report_ActiveReport_Variable_Width.Document;
  307. _Thread.Create("ACTIVE_REPORT_DATA", ActiveReport_DataBinding, Report_ActiveReport_Variable_Width);
  308. break;
  309. }
  310. }
  311. // set active report class : 혹시 외부에서 접근가능할 루틴이 필요하다면 사용
  312. public DataDynamics.ActiveReports.Document.Document Document
  313. {
  314. set
  315. {
  316. this.viewer_Report.Document = value;
  317. }
  318. }
  319. // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
  320. public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)
  321. {
  322. // 프로그레스바 진행중에는 닫아 버리면 종료
  323. if (Popup_ReportCreate_Progress != null)
  324. {
  325. _Popup.ProcessPopup_Enable = false;
  326. _Popup.ProcessPopup_Processbar_AllCnt = 0;
  327. _Popup.ProcessPopup_Processbar_Cnt = 0;
  328. Popup_ReportCreate_Progress.Close();
  329. }
  330. // 툴바 클릭 이벤트 핸들러 해제
  331. if(this.viewer_Report.Toolbar.ToolStrip.Items["엑셀 내보내기"] != null)
  332. this.viewer_Report.Toolbar.ToolStrip.Items["엑셀 내보내기"].Click -= new EventHandler(Form_ActiveReportViewer_XLS_Export_Click);
  333. if (this.viewer_Report.Toolbar.ToolStrip.Items["PDF 내보내기"] != null)
  334. this.viewer_Report.Toolbar.ToolStrip.Items["PDF 내보내기"].Click -= new EventHandler(Form_ActiveReportViewer_PDF_Export_Click);
  335. // 레포트 데이타 처리의 총개수를 알아내는 스레드 종료하는 이벤트 핸들러 해제
  336. this.ThreadEnd_SendMessage_Event -= new ThreadEnd_SendMessage_Handler(Form_ActiveReportViewer_ThreadEnd_SendMessage_Event);
  337. // 프로그램 실행중 한번만 실행하도록 만듬
  338. _Data.ActiveReportViewer_Enable = false;
  339. }
  340. // 데이타 타입에 따라 레포트 문서 타입이 결정됩니다.
  341. public void Create_ActiveReportData(ACTIVE_REPORT_DATA DATA_TYPE)
  342. {
  343. // 레포트 준비중이라는 팝업창을 생성
  344. if (Popup_ReportCreate_Progress != null) _Crossthread.Form_Close(Popup_ReportCreate_Progress);
  345. Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.ReportReady, 0);
  346. // 데이타 처리 개수를 알아내기 위해 스레드로 돌린다
  347. switch (DATA_TYPE)
  348. {
  349. // 연동 그룹
  350. case ACTIVE_REPORT_DATA.OPER_GROUP:
  351. {
  352. Thread WorkingThread_Popup = new Thread(new ThreadStart(Ready_For_AllCnt_OPER_GROUP));
  353. WorkingThread_Popup.Start();
  354. }
  355. break;
  356. // 연동 설정
  357. case ACTIVE_REPORT_DATA.OPER_SET:
  358. {
  359. Thread WorkingThread_Popup = new Thread(new ThreadStart(Ready_For_AllCnt_OPER_SET));
  360. WorkingThread_Popup.Start();
  361. }
  362. break;
  363. }
  364. }
  365. //
  366. // 전체 작업개수를 알아내기 위한 스레드
  367. //
  368. // 연동 그룹
  369. public void Ready_For_AllCnt_OPER_GROUP()
  370. {
  371. // 작업량 예상
  372. Popup_ReportCreate_Progress_Count_End = 0;
  373. DataRowCollection DB_TABLE_GROUP_ForPopup = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", TEMP_RECEIVER_ID));
  374. if (DB_TABLE_GROUP_ForPopup != null && DB_TABLE_GROUP_ForPopup.Count != 0)
  375. {
  376. foreach (DataRow GROUP in DB_TABLE_GROUP_ForPopup)
  377. {
  378. // 그룹
  379. DataRowCollection DB_TABLE_DETAIL_ForPopup = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Gruop_DeviceTable(GROUP[1].ToString(), TEMP_RECEIVER_ID));
  380. if (DB_TABLE_DETAIL_ForPopup != null && DB_TABLE_DETAIL_ForPopup.Count != 0)
  381. Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + DB_TABLE_DETAIL_ForPopup.Count;
  382. // 디바이스가 하나도 없다면
  383. if (DB_TABLE_DETAIL_ForPopup.Count == 0)
  384. Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + 1;
  385. }
  386. }
  387. // 이벤트 발생
  388. ThreadEnd_SendMessage_Write(Popup_ReportCreate_Progress_Count_End, ACTIVE_REPORT_DATA.OPER_GROUP);
  389. }
  390. // 연동 설정
  391. public void Ready_For_AllCnt_OPER_SET()
  392. {
  393. // 작업량 예상
  394. Popup_ReportCreate_Progress_Count_End = 0;
  395. DataRowCollection DB_TABLE_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP", "MAP_ID", TEMP_RECEIVER_ID));
  396. if (DB_TABLE_MAP != null && DB_TABLE_MAP.Count != 0)
  397. {
  398. foreach (DataRow MAP in DB_TABLE_MAP)
  399. {
  400. // 입력 (디바이스)
  401. DataRowCollection DB_TABLE_MAP_IN = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(MAP[1].ToString(), "I", TEMP_RECEIVER_ID));
  402. if (DB_TABLE_MAP_IN != null && DB_TABLE_MAP_IN.Count != 0)
  403. {
  404. Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + DB_TABLE_MAP_IN.Count;
  405. }
  406. // 출력 (디바이스)
  407. DataRowCollection DB_TB_MAP_OUT = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(MAP[1].ToString(), "O", "D", TEMP_RECEIVER_ID));
  408. if (DB_TB_MAP_OUT != null && DB_TB_MAP_OUT.Count != 0)
  409. {
  410. Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + DB_TB_MAP_OUT.Count;
  411. }
  412. // 출력 (그룹)
  413. DataRowCollection DB_MAP_OUT_GROUP = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(MAP[1].ToString(), "O", "G", TEMP_RECEIVER_ID));
  414. if (DB_MAP_OUT_GROUP != null && DB_MAP_OUT_GROUP.Count != 0)
  415. foreach (DataRow DETAIL in DB_MAP_OUT_GROUP)
  416. {
  417. DataRowCollection DB_TABLE_TB_DEVICE_TYPE = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", DETAIL[5].ToString(), TEMP_RECEIVER_ID));
  418. if (DB_TABLE_TB_DEVICE_TYPE != null && DB_TABLE_TB_DEVICE_TYPE.Count != 0)
  419. {
  420. Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + DB_TABLE_TB_DEVICE_TYPE.Count;
  421. }
  422. }
  423. // 입력 출력이 없는 경우
  424. if (DB_TABLE_MAP_IN.Count == 0 && DB_TB_MAP_OUT.Count == 0 && DB_MAP_OUT_GROUP.Count == 0)
  425. Popup_ReportCreate_Progress_Count_End = Popup_ReportCreate_Progress_Count_End + 1;
  426. }
  427. }
  428. // 이벤트 발생
  429. ThreadEnd_SendMessage_Write(Popup_ReportCreate_Progress_Count_End, ACTIVE_REPORT_DATA.OPER_SET);
  430. }
  431. // 스레드가 종료되면 호출되는 함수
  432. delegate void CallBack_Form_SetObject(int AllWorkCount, ACTIVE_REPORT_DATA DATA_TYPE);
  433. public void Form_ActiveReportViewer_ThreadEnd_SendMessage_Event(int AllWorkCount, ACTIVE_REPORT_DATA DATA_TYPE)
  434. {
  435. if (this.InvokeRequired)
  436. {
  437. CallBack_Form_SetObject d = new CallBack_Form_SetObject(Form_ActiveReportViewer_ThreadEnd_SendMessage_Event);
  438. this.Invoke(d, new object[] { AllWorkCount, DATA_TYPE });
  439. }
  440. else
  441. {
  442. // 기존의 팝업창을 종료하고 프로그레스바 팝업창으로 재생성
  443. //
  444. if (Popup_ReportCreate_Progress != null) _Crossthread.Form_Close(Popup_ReportCreate_Progress);
  445. // 작업 데이타가 없다면 경고 문구 출력후 종료
  446. if (AllWorkCount == 0)
  447. {
  448. Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.NotReportCreateData, 0);
  449. }
  450. else
  451. {
  452. Popup_ReportCreate_Progress = _Popup.Create(Popup_Type.Progress, Popup_Style.Normal, _Text.OK, 250, 200, _Text.ReportCreateProgress, AllWorkCount);
  453. switch (DATA_TYPE)
  454. {
  455. case ACTIVE_REPORT_DATA.OPER_GROUP:
  456. {
  457. // 레포트 문서 지정
  458. OperGroup = new ActiveReport_OperGroup(TEMP_RECEIVER_ID, Popup_ReportCreate_Progress);
  459. this.viewer_Report.Document = OperGroup.Document;
  460. // 실제 레포트 작업 스레드 생성
  461. Thread WorkingThread = new Thread(new ThreadStart(ActiveReport_DataBinding_OperGroup));
  462. WorkingThread.Start();
  463. }
  464. break;
  465. case ACTIVE_REPORT_DATA.OPER_SET:
  466. {
  467. // 레포트 문서 지정
  468. OperSet = new ActiveReport_OperSet(TEMP_RECEIVER_ID, Popup_ReportCreate_Progress);
  469. this.viewer_Report.Document = OperSet.Document;
  470. // 실제 레포트 작업스레드 생성
  471. Thread WorkingThread = new Thread(new ThreadStart(ActiveReport_DataBinding_OperSet));
  472. WorkingThread.Start();
  473. }
  474. break;
  475. }
  476. }
  477. }
  478. }
  479. //
  480. // 레포트 생성 스레드
  481. //
  482. public void ActiveReport_DataBinding_OperGroup()
  483. {
  484. try
  485. {
  486. OperGroup.Run();
  487. }
  488. catch (Exception e)
  489. {
  490. _Event.DebugView_SendMessage_Write(e.ToString());
  491. }
  492. }
  493. public void ActiveReport_DataBinding_OperSet()
  494. {
  495. try
  496. {
  497. OperSet.Run();
  498. }
  499. catch (Exception e)
  500. {
  501. _Event.DebugView_SendMessage_Write(e.ToString());
  502. }
  503. }
  504. public void ActiveReport_DataBinding(object ActiveReport_Documnet)
  505. {
  506. try
  507. {
  508. // Reflection 을 이용해서 타입을 추출
  509. Type ptype = ActiveReport_Documnet.GetType();
  510. // 레포트 실행 (타입별 실행되는 레포트 문서가 틀리다)
  511. if (ptype == typeof(ActiveReport_Variable_Width))
  512. ((ActiveReport_Variable_Width)ActiveReport_Documnet).Run();
  513. else if (ptype == typeof(ActiveReport_Variable_Height))
  514. ((ActiveReport_Variable_Height)ActiveReport_Documnet).Run();
  515. }
  516. catch (Exception e)
  517. {
  518. _Event.DebugView_SendMessage_Write(e.ToString());
  519. }
  520. }
  521. //
  522. // 파일 내보내기
  523. //
  524. // XLS 파일로 내보내기
  525. public void Form_ActiveReportViewer_XLS_Export_Click(object sender, EventArgs e)
  526. {
  527. // 다이얼로그 생성
  528. SaveFileDialog SaveFileDialog_XLS = new SaveFileDialog();
  529. // 확장자 넣기
  530. SaveFileDialog_XLS.Filter = "(*.xls)|*.xls";
  531. // 파일 세이브 다이얼로그
  532. if (SaveFileDialog_XLS.ShowDialog() == DialogResult.OK)
  533. {
  534. if (SaveFileDialog_XLS.FileName.Substring(SaveFileDialog_XLS.FileName.Length - 3, 3).ToUpper() == "XLS")
  535. {
  536. XlsExport DocumentXlsExport = new DataDynamics.ActiveReports.Export.Xls.XlsExport();
  537. DocumentXlsExport.Export(this.viewer_Report.Document, SaveFileDialog_XLS.FileName);
  538. }
  539. }
  540. }
  541. // PDF 파일로 내보내기
  542. public void Form_ActiveReportViewer_PDF_Export_Click(object sender, EventArgs e)
  543. {
  544. // 다이얼로그 생성
  545. SaveFileDialog SaveFileDialog_PDF = new SaveFileDialog();
  546. // 확장자 넣기
  547. SaveFileDialog_PDF.Filter = "(*.pdf)|*.pdf";
  548. // 파일 세이브 다이얼로그
  549. if (SaveFileDialog_PDF.ShowDialog() == DialogResult.OK)
  550. {
  551. if (SaveFileDialog_PDF.FileName.Substring(SaveFileDialog_PDF.FileName.Length - 3, 3).ToUpper() == "PDF")
  552. {
  553. PdfExport DocumentPdfExport = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();
  554. DocumentPdfExport.Export(this.viewer_Report.Document, SaveFileDialog_PDF.FileName);
  555. }
  556. }
  557. }
  558. }
  559. */
  560. }