private void CopyReport(int ReportId)
        {
            var objReportController = new ReportController();
            var objReport           = objReportController.GetReport(ReportId);

            objReportController.UpdateReport(ReportSetId, -1, objReport.ReportTypeId, "Copy of " + objReport.ReportName, objReport.ReportTheme, objReport.ReportConnectionId, objReport.ReportHeaderText, objReport.ReportFooterText, objReport.ReportCommand, objReport.ReportConfig, -1, objReport.ReportDrilldownReportId, objReport.ReportDrilldownFieldname, objReport.ReportNoItemsText, objReport.ReportPageTitle, objReport.ReportCommandCacheTimeout, objReport.ReportMetaDescription, objReport.ReportCommandCacheScheme);
        }
        private void SaveReport()
        {
            RetrieveReportSettings();

            var objReportController = new ReportController();

            ReportId = objReportController.UpdateReport(ReportSetId, ReportId, ddReportType.SelectedValue, txtName.Text, cboSkin.SelectedItem.Value, Convert.ToInt32(cpConnection.ConnectionId), txtHeader.Text, txtFooter.Text, txtQuery.Text, ReportConfig, -1, Convert.ToInt32(ddDrilldownReportId.SelectedValue), txtDrilldownFieldname.Text, txtNoItems.Text, txtPageTitle.Text, Convert.ToInt32(txtCommandCacheTimeout.Text), txtMetaDescription.Text, ddCommandCacheScheme.SelectedValue);
        }
        private void ImportReport(int ReportSetId, XmlNode root)
        {
            XmlNode xmlReports = root["reports"];

            var ctrl = new ReportController();

            var reportId                  = default(int);
            var reportTypeId              = default(string);
            var reportName                = default(string);
            var reportTheme               = default(string);
            var reportConnectionId        = default(int);
            var reportConnectionString    = default(string);
            var reportFooterText          = default(string);
            var reportHeaderText          = default(string);
            var reportCommand             = default(string);
            var reportConfig              = default(string);
            var reportOrder               = default(int);
            var reportDrilldownReportId   = default(int);
            var reportDrilldownFieldname  = default(string);
            var reportNoItemsText         = default(string);
            var reportPageTitle           = default(string);
            var reportCommandCacheTimeout = default(int);

            var reportMapping = new Hashtable();             //map old reportid to new ones for drilldown reference

            foreach (XmlNode xmlReport in xmlReports.ChildNodes)
            {
                reportId               = Convert.ToInt32(xmlReport["id"].InnerText);
                reportTypeId           = xmlReport["reporttype"].InnerText;
                reportName             = xmlReport["name"].InnerText;
                reportTheme            = xmlReport["theme"].InnerText;
                reportConnectionId     = Convert.ToInt32(xmlReport["connectionid"].InnerText);
                reportConnectionString = xmlReport["connectionstring"].InnerText;
                if (reportConnectionId != (int)ConnectionType.PortalDefault & reportConnectionId != (int)ConnectionType.ReportSetDefault)
                {
                    reportConnectionId = ImportConnection("Imported " + DateTime.Now.ToShortDateString(), reportConnectionString);
                }
                reportFooterText        = xmlReport["footertext"].InnerText;
                reportHeaderText        = xmlReport["headertext"].InnerText;
                reportCommand           = xmlReport["command"].InnerText;
                reportConfig            = xmlReport["config"].InnerText;
                reportOrder             = Convert.ToInt32(xmlReport["order"].InnerText);
                reportDrilldownReportId = Convert.ToInt32(xmlReport["drilldownreportid"].InnerText);
                if (reportDrilldownReportId > -1)
                {
                    if (reportMapping.ContainsKey(reportDrilldownReportId))
                    {
                        reportDrilldownReportId = Convert.ToInt32(reportMapping[reportDrilldownReportId]);
                    }
                }
                reportDrilldownFieldname  = xmlReport["drilldownfieldname"].InnerText;
                reportNoItemsText         = GetNodeInnerText(xmlReport, "noitemstext");
                reportPageTitle           = GetNodeInnerText(xmlReport, "pagetitle");
                reportCommandCacheTimeout = int.Parse(GetNodeInnerText(xmlReport, "cachetimeout", "0"));
                var reportMetaDescription    = GetNodeInnerText(xmlReport, "metadescription");
                var reportCommandCacheScheme = GetNodeInnerText(xmlReport, "cachescheme", "Sliding");

                // check if id is already present
                var newid = ctrl.UpdateReport(ReportSetId, -1, reportTypeId, reportName, reportTheme, reportConnectionId, reportHeaderText, reportFooterText, reportCommand, reportConfig, reportOrder, reportDrilldownReportId, reportDrilldownFieldname, reportNoItemsText, reportPageTitle, reportCommandCacheTimeout, reportMetaDescription, reportCommandCacheScheme);
                reportMapping.Add(reportId, newid);
            }
        }