/// <summary>
        /// This is an example of how to override the MarkThree.Windows.Controls.Report class.
        /// </summary>
        public ReportEquityWorkingOrder()
        {
            // All records in the presentation layer of the report require a unique identifier.  When the report is updated, this
            // identifier is used to map the data to an existing record or to create a new one.  The starting point for the report
            // is the header record which uses this identifier.  The rest of the records in the report will generally use the
            // source DataRow as the unique identifier.
            this.guid = Guid.NewGuid();

            this.reportId = Guid.Empty;

            // These objects are required for sorting, filtering and ordering the report.
            this.prefilter = new ComplexFilter <WorkingOrderRow>();
            this.prefilter.Add(this.FilterBlotters);
            this.filter   = new ComplexFilter <Schema.EquityWorkingOrder.WorkingOrder>();
            this.comparer = new ComplexComparer <Schema.EquityWorkingOrder.WorkingOrder>();
            this.comparer.Add(new Schema.EquityWorkingOrder.MarketValueComparer(), SortOrder.Descending);

            // This is the list of all the blotters on display in this report.  A single blotter can be displayed or several may be
            // aggregated.  The blotter list is used by the 'prefilter' to determine which WorkingOrder rows from the data model
            // should be transformed into the presentation layer objects.
            this.setBlotterFilterHandler = new SetBlotterFilterHandler(OnSetBlotterFilter);
            this.blotterList             = new List <Guid>();

            // This is needed to satisfy the compiler.  In practice, this value is loaded from the user settings and defaulted
            // through the same mechanism.
            this.AnimationSpeed = AnimationSpeed.Off;

            this.CommandBindings.Add(new CommandBinding(FluidTradeCommands.SortReport, OnSortReport));

            // These handlers will update the middle tier in response to changes in the report.
            this.AddHandler(ToggleButton.CheckedEvent, new RoutedEventHandler(OnToggleButtonChange));
            this.AddHandler(ToggleButton.UncheckedEvent, new RoutedEventHandler(OnToggleButtonChange));
            this.AddHandler(Selector.SelectionChangedEvent, new RoutedEventHandler(OnSelectorSelectionChanged));
            this.AddHandler(TextBox.TextChangedEvent, new RoutedEventHandler(OnTextChanged));
            this.AddHandler(TextBox.LostFocusEvent, new RoutedEventHandler(OnTextBoxLostFocus));

            // These handlers take care of installing and uninstalling this window in the data model update events.
            this.Loaded   += new RoutedEventHandler(OnLoaded);
            this.Unloaded += new RoutedEventHandler(OnUnloaded);
        }
        /// <summary>
        /// This is an example of how to override the MarkThree.Windows.Controls.Report class.
        /// </summary>
        public ReportDebtNegotiatorPaymentSummary()
        {
            // All records in the presentation layer of the report require a unique identifier.  When the report is updated, this
            // identifier is used to map the data to an existing record or to create a new one.  The starting point for the report
            // is the header record which uses this identifier.  The rest of the records in the report will generally use the
            // source DataRow as the unique identifier.
            this.guid = Guid.NewGuid();

            this.reportId = Guid.Empty;

            // These objects are required for sorting, filtering and ordering the report.
            this.prefilter = new ComplexFilter <ConsumerTrustPaymentRow>();
            this.prefilter.Add(this.FilterBlotters);
            this.filter   = new ComplexFilter <Schema.DebtNegotiatorPaymentSummary.PaymentSummary>();
            this.comparer = new ComplexComparer <Schema.DebtNegotiatorPaymentSummary.PaymentSummary>();
            this.comparer.Add(new Schema.DebtNegotiatorPaymentSummary.EffectivePaymentDateComparer(), SortOrder.Ascending);

            // This is needed to satisfy the compiler.  In practice, this value is loaded from the user settings and defaulted
            // through the same mechanism.
            this.AnimationSpeed = AnimationSpeed.Off;

            this.CommandBindings.Add(new CommandBinding(FluidTradeCommands.SortReport, OnSortReport));

            // These handlers will update the middle tier in response to changes in the report.
            this.AddHandler(FluidTrade.Actipro.DateTimePicker.DateTimeChangedEvent, new RoutedEventHandler(OnDateTimePicker));
            this.AddHandler(FluidTrade.Guardian.Windows.Controls.StatusComboBox.PersistentSelectedValueChangedEvent, new RoutedEventHandler(OnComboBoxChange));
            this.AddHandler(ToggleButton.CheckedEvent, new RoutedEventHandler(OnToggleButtonChange));
            this.AddHandler(ToggleButton.UncheckedEvent, new RoutedEventHandler(OnToggleButtonChange));
            this.AddHandler(TextBox.TextChangedEvent, new RoutedEventHandler(OnTextChanged));
            this.AddHandler(TextBox.LostFocusEvent, new RoutedEventHandler(OnTextBoxLostFocus));
            this.AddHandler(ReportGrid.ShowToolTipEvent, new ReportGridtToolTipEventHandler(OnShowToolTipHandler));


            // These handlers take care of installing and uninstalling this window in the data model update events.
            this.Loaded   += new RoutedEventHandler(OnLoaded);
            this.Unloaded += new RoutedEventHandler(OnUnloaded);
        }