⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sharpreportview.cs

📁 SharpDevelop2.0.0 c#开发免费工具
💻 CS
📖 第 1 页 / 共 2 页
字号:
/*
 * Created by SharpDevelop.
 * User: Forstmeier Peter
 * Date: 10.01.2005
 * Time: 10:04
 *
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
// one line to give the program's name and an idea of what it does.
// Copyright (C) 2005  peter.forstmeier@t-online.de

using System;
using System.IO;
//using System.ComponentModel;
using System.Globalization;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Data;

using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;

using SharpReport;
using SharpReportCore;
using SharpReport.Designer;

namespace SharpReportAddin{
	/// <summary>
	/// Description of the view content
	/// </summary>
	public class SharpReportView : AbstractViewContent,IPrintable,IDisposable
	{
		
		private SharpReportManager reportManager;
		
		private BaseDesignerControl designerControl;
		private	TabControl tabControl;
		private TabPage designerPage;
		private TabPage previewPage;
		
		// SideBar
		private AxSideTab sideTabItem = null;
		private AxSideTab sideTabFunctions = null;
		private Panel panel;
		
		private bool disposed;
		
		#region privates
		
		void InitView() {
			try {
				reportManager = new SharpReportManager();
				panel = new Panel();
				panel.AutoScroll = true;
				CreateTabControl();
				SharpReportView.BuildToolBarItems();
				if (PropertyPad.Grid != null) {
					PropertyPad.Grid.SelectedObject = designerControl.ReportModel.ReportSettings;
					PropertyPad.Grid.Refresh();
				}
					
				//Activate the FieldsExplorer - Pad
				PadDescriptor pad = WorkbenchSingleton.Workbench.GetPad(typeof(FieldsExplorer));
				if (pad != null) {
					pad.CreatePad();
				}	
			} catch (Exception) {
				throw;
			}
		}
		
		
		// when the model is build, grap these events, otherwise we get permanent
		// changes of IsDirty
		
		private void SetOnPropertyChangedEvents () {
			try {
				ReportModel model = designerControl.ReportModel;

				model.ReportSettings.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
				model.ReportHeader.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
				model.PageHeader.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
				model.DetailSection.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
				model.PageFooter.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
				model.ReportFooter.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
				//watch for FileName change from Reportsettings as well
				model.ReportSettings.FileNameChanged += new EventHandler(OnModelFileNameChanged);
			} catch (Exception) {
				throw;
			}
		}
		
		#endregion
		
		
		
		#region SideBar Handling
		
		private static bool SharpReportIsRunning () {
			// Did we already exist
			foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) {
				SharpReportView view = content as SharpReportView;
				if (view != null) {
					return true;
				}
			}
			return false;
		}
		
		private static SharpDevelopSideBar GetSideBar () {
			SideBarView v = (SideBarView)WorkbenchSingleton.Workbench.GetPad (typeof(SideBarView)).PadContent;
			SharpDevelopSideBar sb =(SharpDevelopSideBar) v.Control;
			return sb;
		}
		
		private static void BuildToolBarItems() {
			
			SharpDevelopSideBar	sideBar = SharpReportView.GetSideBar();

			if (!SharpReportView.SharpReportIsRunning()) {
				SharpReport.BuildSideTab buildSideTab = new SharpReport.BuildSideTab (sideBar);
				buildSideTab.CreateSidetabs();
				sideBar.Refresh();
			}
		}
		
		
		
		
		void RemoveSideBarItem() {

			if (!SharpReportView.SharpReportIsRunning()) {
				if (sideTabItem != null) {
					SharpDevelopSideBar	sideBar = SharpReportView.GetSideBar();
					sideBar.Tabs.Remove (sideTabItem);
				}
				
				if (this.sideTabFunctions != null) {
					SharpDevelopSideBar	sideBar = GetSideBar();
					sideBar.Tabs.Remove(this.sideTabFunctions);
				}
				SideBarView v = (SideBarView)WorkbenchSingleton.Workbench.GetPad (typeof(SideBarView)).PadContent;
				SharpDevelopSideBar sb =(SharpDevelopSideBar) v.Control;
				
				AxSideTab s;
				for (int i = SideBarView.sideBar.Tabs.Count -1; i > 0;i -- ) {
					s = SideBarView.sideBar.Tabs[i];
					if (s.Name.IndexOf("Report") > 0) {
						SideBarView.sideBar.Tabs.Remove(s);
					}
				}
				sb.Refresh();
			}
		}
		
		#endregion
		
		
		#region Control
		
		void CreateTabControl() {
			tabControl = new TabControl();
			tabControl.SelectedIndexChanged += new EventHandler (OnTabPageChanged);
			
			designerPage = new TabPage();

			designerControl = CreateDesignerControl();
			designerPage.Controls.Add (designerControl);
			//create only the TabPage, no Controls are added
			previewPage = new TabPage ();
			tabControl.TabPages.Add (designerPage);
			tabControl.TabPages.Add (previewPage);
			
			tabControl.Alignment = TabAlignment.Bottom;
			
			panel.Dock = DockStyle.Fill;
			panel.AutoScroll = true;
			
			tabControl.Dock = DockStyle.Fill;

			panel.Controls.Add (tabControl);
			SetHeadLines();
			
		}
		//We set all captions in one method, so we can react much easier on changing of lanuages
		void SetHeadLines(){
			designerPage.Text = ResourceService.GetString("SharpReport.Design");
			previewPage.Text = ResourceService.GetString("SharpReport.Preview");
			this.OnTabPageChanged (this,EventArgs.Empty);
			this.designerControl.Localise();
			
		}
		
		private BaseDesignerControl CreateDesignerControl() {
			BaseDesignerControl ctrl = reportManager.BaseDesignControl;
			ctrl.SuspendLayout();
			ctrl.ReportControl.Width = ctrl.ReportModel.ReportSettings.PageSettings.Bounds.Width;
			ctrl.ReportControl.AutoScroll = true;
			ctrl.Dock = DockStyle.Fill;
			ctrl.ResumeLayout();
			
			ctrl.ReportControl.ObjectSelected +=new EventHandler <EventArgs>(OnObjectSelected);
			
			ctrl.ReportControl.DesignViewChanged += new ItemDragDropEventHandler (OnItemDragDrop);
			ctrl.DesignerDirty += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
			return ctrl;
		}
		
		#endregion
		
		
		#region Preview handling
		
		private static  DataSet DataSetFromFile () {
			DataSet ds = new DataSet();
			ds.Locale = CultureInfo.InvariantCulture;
			using (OpenFileDialog openFileDialog = new OpenFileDialog()){
				openFileDialog.Filter = GlobalValues.XsdFileFilter;
				openFileDialog.DefaultExt = GlobalValues.XsdExtension;
				openFileDialog.AddExtension    = true;
				if(openFileDialog.ShowDialog() == DialogResult.OK){
					if (openFileDialog.FileName.Length > 0) {
						
						ds.ReadXml (openFileDialog.FileName);
					}
				}
			}
			return ds;
		}
		
		private void RunPreview(bool standAlone) {
			base.OnSaving(EventArgs.Empty);
			try {
				switch (designerControl.ReportModel.DataModel) {
						case GlobalEnums.enmPushPullModel.FormSheet : {
							PreviewStandartReport(standAlone);
							break;
						}
						case GlobalEnums.enmPushPullModel.PullData:{
							PreviewStandartReport(standAlone);
							break;
						}
						case GlobalEnums.enmPushPullModel.PushData:{
							PreviewPushReport (standAlone);
							break;
						}
					default:
						throw new SharpReportException("Wrong ReportType");
						
				}
			} catch (Exception e) {
				MessageService.ShowError(e);
			}
			
		}
		
		
		
		private void PreviewPushReport (bool standAlone){
			try {
				DataSet ds = SharpReportView.DataSetFromFile ();
				reportManager.ReportPreviewPushData(designerControl.ReportModel,
				                                    ds,
				                                    standAlone);
			}catch (Exception e){
				MessageService.ShowError (e,e.Message);
			}
		}
		
		
		private void PreviewStandartReport(bool standAlone){
			reportManager.NoData -= new EventHandler<SharpReportEventArgs> (OnNoDataForReport);
			reportManager.NoData += new EventHandler<SharpReportEventArgs> (OnNoDataForReport);
			
			reportManager.ParametersRequest -= new EventHandler<SharpReportParametersEventArgs> (OnParametersRequest);
			reportManager.ParametersRequest +=  new EventHandler<SharpReportParametersEventArgs>(OnParametersRequest);
			
			reportManager.ReportPreview (designerControl.ReportModel, standAlone);
			
		}
		
		#endregion
		
		#region Events
		void OnNoDataForReport (object sender,SharpReportEventArgs e) {
			DialogResult result = MessageBox.Show("This Report contains no Data. Show it as FormSheet",
			                                      "SharpReport",
			                                      MessageBoxButtons.OKCancel,
			                                      MessageBoxIcon.Warning,
			                                      MessageBoxDefaultButton.Button1);
			switch(result) {
				case DialogResult.OK:
					e.Cancel = false;
					break;
				case DialogResult.Cancel:
					e.Cancel = true;
					break;
			}
		}
		
		///<summary>This Event is called if the Report need's Parameters to run a Query,
		/// you can take this as an example how to react to an request for Parameters
		/// The other posibillity is, to fill/change the ParametersCollection by Code or
		/// just write an small Dialog to enter the Parameter values
		/// </summary>
		
		private void OnParametersRequest (object sender,SharpReportParametersEventArgs e) {
			AbstractParametersCollection collection = e.SqlParametersCollection;
			if (collection != null && collection.Count > 0) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -