internal void Run(IPresent ip)
        {
            if (_Subreport == null)
            {                   // do true intialization
                ip.Start();
            }

            if (ip.IsPagingNeeded())
            {
                RunPage(ip);
            }
            else
            {
                if (_PageHeader != null && !(ip is RenderXml))
                {
                    _PageHeader.Run(ip, null);
                }
                _Body.Run(ip, null);
                if (_PageFooter != null && !(ip is RenderXml))
                {
                    _PageFooter.Run(ip, null);
                }
            }

            if (_Subreport == null)
            {
                ip.End();
            }

            if (_DataSourcesDefn != null)
            {
                _DataSourcesDefn.CleanUp(ip.Report());                  // datasets may not have been cleaned up
            }
        }