📄 sharpreportview.cs
字号:
/*
* 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 + -