123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507 |
- using System;
- using System.ComponentModel;
- using FastReport.Matrix;
- using FastReport.Utils;
- using FastReport.Data;
- using FastReport.Table;
- using System.Drawing.Design;
- namespace FastReport.CrossView
- {
- /// <summary>
- /// Represents the crossview object that is used to print cube slice or slicegrid.
- /// </summary>
- public partial class CrossViewObject : TableBase
- {
- #region Fields
- //private FastCubeSource fastCubeSource;
- private CubeSourceBase cubeSource;
- private bool showTitle;
- private bool showXAxisFieldsCaption;
- private bool showYAxisFieldsCaption;
- private string style;
- private CrossViewData data;
- private string modifyResultEvent;
- private CrossViewHelper helper;
- private bool saveVisible;
- private MatrixStyleSheet styleSheet;
- #endregion
- #region Properties
- /// <summary>
- /// Allows to modify the prepared matrix elements such as cells, rows, columns.
- /// </summary>
- public event EventHandler ModifyResult;
- /// <summary>
- /// Gets or sets a value indicating whether to show a title row.
- /// </summary>
- [DefaultValue(false)]
- [Category("Behavior")]
- public bool ShowTitle
- {
- get { return showTitle; }
- set
- {
- showTitle = value;
- if (IsDesigning)
- {
- //Data.CreateDescriptors();
- //FHelper.CreateOtherDescriptor();
- BuildTemplate();
- }
- }
- }
- /// <summary>
- /// Gets or sets a value indicating whether to show a X Axis fields Caption.
- /// </summary>
- [DefaultValue(false)]
- [Category("Behavior")]
- public bool ShowXAxisFieldsCaption
- {
- get { return showXAxisFieldsCaption; }
- set
- {
- showXAxisFieldsCaption = value;
- if (IsDesigning)
- {
- //Data.CreateDescriptors();
- //FHelper.CreateOtherDescriptor();
- BuildTemplate();
- }
- }
- }
- /// <summary>
- /// Gets or sets a value indicating whether to show a Y Axis fields Caption.
- /// </summary>
- [DefaultValue(false)]
- [Category("Behavior")]
- public bool ShowYAxisFieldsCaption
- {
- get { return showYAxisFieldsCaption; }
- set
- {
- showYAxisFieldsCaption = value;
- if (IsDesigning)
- {
- //Data.CreateDescriptors();
- //FHelper.CreateOtherDescriptor();
- BuildTemplate();
- }
- }
- }
- /// <summary>
- /// Gets or sets a matrix style.
- /// </summary>
- [Category("Appearance")]
- [Editor("FastReport.TypeEditors.CrossViewStyleEditor, FastReport", typeof(UITypeEditor))]
- public new string Style
- {
- get { return style; }
- set
- {
- style = value;
- Helper.UpdateStyle();
- }
- }
- /// <summary>
- /// Gets or sets a script method name that will be used to handle the
- /// <see cref="ModifyResult"/> event.
- /// </summary>
- /// <remarks>
- /// See the <see cref="ModifyResult"/> event for more details.
- /// </remarks>
- [Category("Build")]
- public string ModifyResultEvent
- {
- get { return modifyResultEvent; }
- set { modifyResultEvent = value; }
- }
- /// <summary>
- ///
- /// </summary>
- [Browsable(false)]
- public string ColumnDescriptorsIndexes
- {
- get { return Data.ColumnDescriptorsIndexes; }
- set { if (!IsDesigning) Data.ColumnDescriptorsIndexes = value; }
- }
- /// <summary>
- ///
- /// </summary>
- [Browsable(false)]
- public string RowDescriptorsIndexes
- {
- get { return Data.RowDescriptorsIndexes; }
- set { if (!IsDesigning) Data.RowDescriptorsIndexes = value; }
- }
- /// <summary>
- ///
- /// </summary>
- [Browsable(false)]
- public string ColumnTerminalIndexes
- {
- get { return Data.ColumnTerminalIndexes; }
- set { if (!IsDesigning) Data.ColumnTerminalIndexes = value; }
- }
- /// <summary>
- ///
- /// </summary>
- [Browsable(false)]
- public string RowTerminalIndexes
- {
- get { return Data.RowTerminalIndexes; }
- set { if (!IsDesigning) Data.RowTerminalIndexes = value; }
- }
- /// <summary>
- /// Gets or sets a cube source.
- /// </summary>
- [Category("Data")]
- public CubeSourceBase CubeSource
- {
- get { return cubeSource; }
- set
- {
- if (cubeSource != value)
- {
- if (cubeSource != null)
- {
- cubeSource.Disposed -= new EventHandler(CubeSource_Disposed);
- cubeSource.OnChanged -= new EventHandler(CubeSource_OnChanged);
- }
- if (value != null)
- {
- value.Disposed += new EventHandler(CubeSource_Disposed);
- value.OnChanged += new EventHandler(CubeSource_OnChanged);
- }
- cubeSource = value;
- Data.CubeSource = value;
- if (IsDesigning)
- {
- Data.CreateDescriptors();
- helper.CreateOtherDescriptor();
- BuildTemplate();
- }
- }
- }
- }
- /// <summary>
- /// Gets the object that holds data of Cube
- /// </summary>
- /// <remarks>
- /// See the <see cref="CrossViewData"/> class for more details.
- /// </remarks>
- [Browsable(false)]
- public CrossViewData Data
- {
- get { return data; }
- }
- internal MatrixStyleSheet StyleSheet
- {
- get { return styleSheet; }
- }
- private CrossViewHelper Helper
- {
- get { return helper; }
- }
- private bool IsResultCrossView
- {
- get { return !IsDesigning /*&& Data.Columns.Count == 0 && Data.Rows.Count == 0 */; }
- }
- private BandBase ParentBand
- {
- get
- {
- BandBase parentBand = this.Band;
- if (parentBand is ChildBand)
- parentBand = (parentBand as ChildBand).GetTopParentBand;
- return parentBand;
- }
- }
- private DataBand FootersDataBand
- {
- get
- {
- DataBand dataBand = null;
- if (ParentBand is GroupFooterBand)
- dataBand = ((ParentBand as GroupFooterBand).Parent as GroupHeaderBand).GroupDataBand;
- else if (ParentBand is DataFooterBand)
- dataBand = ParentBand.Parent as DataBand;
- return dataBand;
- }
- }
- private bool IsOnFooter
- {
- get
- {
- DataBand dataBand = FootersDataBand;
- if (dataBand != null)
- {
- // return DataSource == dataBand.DataSource;
- }
- return false;
- }
- }
- #endregion
- #region Private Methods
- private void CreateResultTable()
- {
- SetResultTable(new TableResult());
- // assign properties from this object. Do not use Assign method: TableResult is incompatible with MatrixObject.
- ResultTable.OriginalComponent = OriginalComponent;
- ResultTable.Alias = Alias;
- ResultTable.Border = Border.Clone();
- ResultTable.Fill = Fill.Clone();
- ResultTable.Bounds = Bounds;
- ResultTable.PrintOnParent = PrintOnParent;
- ResultTable.RepeatHeaders = RepeatHeaders;
- ResultTable.RepeatRowHeaders = RepeatRowHeaders;
- ResultTable.RepeatColumnHeaders = RepeatColumnHeaders;
- ResultTable.Layout = Layout;
- ResultTable.WrappedGap = WrappedGap;
- ResultTable.AdjustSpannedCellsWidth = AdjustSpannedCellsWidth;
- ResultTable.SetReport(Report);
- ResultTable.AfterData += new EventHandler(ResultTable_AfterData);
- }
- private void DisposeResultTable()
- {
- ResultTable.Dispose();
- SetResultTable(null);
- }
- private void ResultTable_AfterData(object sender, EventArgs e)
- {
- OnModifyResult(e);
- }
- private void CubeSource_Disposed(object sender, EventArgs e)
- {
- Data.CubeSource = null;
- }
- private void CubeSource_OnChanged(object sender, EventArgs e)
- {
- Data.CreateDescriptors();
- helper.CreateOtherDescriptor();
- BuildTemplate();
- }
- private void WireEvents(bool wire)
- {
- if (IsOnFooter)
- {
- DataBand dataBand = FootersDataBand;
- if (wire)
- dataBand.BeforePrint += new EventHandler(dataBand_BeforePrint);
- else
- dataBand.BeforePrint -= new EventHandler(dataBand_BeforePrint);
- }
- }
- private void dataBand_BeforePrint(object sender, EventArgs e)
- {
- /*
- bool firstRow = (sender as DataBand).IsFirstRow;
- if (firstRow)
- Helper.StartPrint();
- Helper.AddDataRow();
- */
- }
- #endregion
- #region Protected Methods
- /// <inheritdoc/>
- protected override void DeserializeSubItems(FRReader reader)
- {
- if (String.Compare(reader.ItemName, "CrossViewColumns", true) == 0)
- reader.Read(Data.Columns);
- else if (String.Compare(reader.ItemName, "CrossViewRows", true) == 0)
- reader.Read(Data.Rows);
- else if (String.Compare(reader.ItemName, "CrossViewCells", true) == 0)
- reader.Read(Data.Cells);
- else
- base.DeserializeSubItems(reader);
- }
- #endregion
- #region Public Methods
- /// <inheritdoc/>
- public override void Assign(Base source)
- {
- base.Assign(source);
- CrossViewObject src = source as CrossViewObject;
- CubeSource = src.CubeSource;
- ShowTitle = src.ShowTitle;
- ShowXAxisFieldsCaption = src.ShowXAxisFieldsCaption;
- ShowYAxisFieldsCaption = src.ShowYAxisFieldsCaption;
- Style = src.Style;
- // MatrixEvenStylePriority = src.MatrixEvenStylePriority;
- }
- /// <inheritdoc/>
- public override void Serialize(FRWriter writer)
- {
- if (writer.SerializeTo != SerializeTo.SourcePages)
- {
- writer.Write(Data.Columns);
- writer.Write(Data.Rows);
- writer.Write(Data.Cells);
- }
- else
- RefreshTemplate(true);
- base.Serialize(writer);
- CrossViewObject c = writer.DiffObject as CrossViewObject;
- if (CubeSource != c.CubeSource)
- writer.WriteRef("CubeSource", CubeSource);
- if (ColumnDescriptorsIndexes != c.ColumnDescriptorsIndexes)
- writer.WriteStr("ColumnDescriptorsIndexes", ColumnDescriptorsIndexes);
- if (RowDescriptorsIndexes != c.RowDescriptorsIndexes)
- writer.WriteStr("RowDescriptorsIndexes", RowDescriptorsIndexes);
- if (ColumnTerminalIndexes != c.ColumnTerminalIndexes)
- writer.WriteStr("ColumnTerminalIndexes", ColumnTerminalIndexes);
- if (RowTerminalIndexes != c.RowTerminalIndexes)
- writer.WriteStr("RowTerminalIndexes", RowTerminalIndexes);
- if (ShowTitle != c.ShowTitle)
- writer.WriteBool("ShowTitle", ShowTitle);
- if (ShowXAxisFieldsCaption != c.ShowXAxisFieldsCaption)
- writer.WriteBool("ShowXAxisFieldsCaption", ShowXAxisFieldsCaption);
- if (ShowYAxisFieldsCaption != c.ShowYAxisFieldsCaption)
- writer.WriteBool("ShowYAxisFieldsCaption", ShowYAxisFieldsCaption);
- if (Style != c.Style)
- writer.WriteStr("Style", Style);
- // if (MatrixEvenStylePriority != c.MatrixEvenStylePriority)
- // writer.WriteValue("MatrixEvenStylePriority", MatrixEvenStylePriority);
- if (ModifyResultEvent != c.ModifyResultEvent)
- writer.WriteStr("ModifyResultEvent", ModifyResultEvent);
- }
- /// <summary>
- /// Creates or updates the matrix template.
- /// </summary>
- /// <remarks>
- /// Call this method after you modify the matrix descriptors using the <see cref="Data"/>
- /// object's properties.
- /// </remarks>
- public void BuildTemplate()
- {
- Helper.BuildTemplate();
- }
- #endregion
- #region Report Engine
- /// <inheritdoc/>
- public override void InitializeComponent()
- {
- base.InitializeComponent();
- WireEvents(true);
- }
- /// <inheritdoc/>
- public override void FinalizeComponent()
- {
- base.FinalizeComponent();
- WireEvents(false);
- }
- /// <inheritdoc/>
- public override void SaveState()
- {
- saveVisible = Visible;
- BandBase parent = Parent as BandBase;
- if (!Visible || (parent != null && !parent.Visible))
- return;
- // create the result table that will be rendered in the preview
- CreateResultTable();
- Visible = false;
- if (parent != null)
- {
- parent.Height = Top;
- parent.CanGrow = false;
- parent.CanShrink = false;
- parent.AfterPrint += new EventHandler(ResultTable.GeneratePages);
- }
- }
- /// <inheritdoc/>
- public override void GetData()
- {
- base.GetData();
- if (Data.SourceAssigned)
- {
- // if (!IsOnFooter)
- // {
- Helper.StartPrint();
- Helper.AddData();
- // }
- Helper.FinishPrint();
- }
- }
- /// <inheritdoc/>
- public override void RestoreState()
- {
- BandBase parent = Parent as BandBase;
- if (!saveVisible || (parent != null && !parent.Visible))
- return;
- if (parent != null)
- parent.AfterPrint -= new EventHandler(ResultTable.GeneratePages);
- DisposeResultTable();
- Visible = saveVisible;
- }
- /// <summary>
- /// This method fires the <b>ModifyResult</b> event and the script code connected to the <b>ModifyResultEvent</b>.
- /// </summary>
- /// <param name="e">Event data.</param>
- public void OnModifyResult(EventArgs e)
- {
- if (ModifyResult != null)
- ModifyResult(this, e);
- InvokeEvent(ModifyResultEvent, e);
- }
- #endregion
- /// <summary>
- /// Initializes a new instance of the <see cref="CrossViewObject"/> class.
- /// </summary>
- public CrossViewObject()
- {
- //FAutoSize = true;
- showXAxisFieldsCaption = true;
- showYAxisFieldsCaption = true;
- data = new CrossViewData();
- helper = new CrossViewHelper(this);
- styleSheet = new MatrixStyleSheet();
- styleSheet.Load(ResourceLoader.GetStream("cross.frss"));
- style = "";
- RepeatHeaders = false;
- RepeatColumnHeaders = true;
- RepeatRowHeaders = true;
- //FFilter = "";
- }
- }
- }
|