protected void BindChartData(IEnumerable <BindingInfoEntity> entities, int?xLabelAngle)
        {
            var namesSet = new HashSet <String>();

            var xMembersSet = new HashSet <String>();
            var yMembersSet = new HashSet <String>();

            var dataSet = new DataSet();

            foreach (var entity in entities)
            {
                if (entity.Bindings == null)
                {
                    continue;
                }

                var modelLp = entity.Bindings.ToLookup(n => n.Caption);

                var modelsGrp = modelLp.FirstOrDefault();
                if (modelsGrp == null)
                {
                    continue;
                }

                var byTargetLp = modelsGrp.ToLookup(n => n.Target);

                var groupMember = modelsGrp.Key;

                var yMember = byTargetLp["YValue"].Select(n => n.Source).Distinct().FirstOrDefault();
                var xMember = byTargetLp["XValue"].Select(n => n.Source).Distinct().FirstOrDefault();

                var sortData = false;
                if (entity.QueryType == "Logic")
                {
                    sortData = !entity.Ordered;
                }

                var collection = GetCollection(entity, groupMember, xMember);

                var dataTable = ReportUnitHelper.GetChartDataTable(groupMember, yMember, xMember, collection, sortData);
                dataTable.TableName = String.Format("{0}; {1}", xMember, yMember);

                dataSet.Tables.Add(dataTable);

                BindChartData(dataTable, entity.Type, groupMember, xMember, yMember, xLabelAngle);

                namesSet.Add(entity.Name);
                xMembersSet.Add(xMember);
                yMembersSet.Add(yMember);
            }

            BindGridData(dataSet);

            lblReportTitle.Text = String.Join(", ", namesSet);

            var xMembers = String.Join(", ", xMembersSet);
            var yMembers = String.Join(", ", yMembersSet);

            lblXYDescription.Text = String.Format("X - {0}; Y - {1}", xMembers, yMembers);
        }
        protected void BindUnitData(ReportUnitModel unitModel)
        {
            var entities = ReportUnitHelper.GetQueries(unitModel, DataContext);

            if (unitModel.Type == "Grid")
            {
                pnlMainGrid.Visible     = true;
                pnlChartImage.Visible   = false;
                tdChartCommands.Visible = false;

                var entiry = entities.FirstOrDefault();
                if (entiry != null)
                {
                    BindGridData(entiry);
                }
            }
            else
            {
                pnlMainGrid.Visible     = true;
                pnlChartImage.Visible   = true;
                tdChartCommands.Visible = true;

                BindChartData(entities, unitModel.XLabelAngle);
            }

            var url = new UrlHelper("~/Pages/User/ReportFullscreen.aspx");

            url["ReportID"] = unitModel.ID;

            btnFullscreen.NavigateUrl = url.ToEncodedUrl();
        }
        protected void btnExportReportOK_OnClick(object sender, EventArgs e)
        {
            var targetType = GetExportTargetType();

            if (pnlChartImage.Visible)
            {
                var dataSource = reportGridsControl.DataSource as DataSet;
                if (dataSource == null)
                {
                    return;
                }

                if (targetType == "PDF" || targetType == "Image")
                {
                    using (var chartImage = GetChartImage())
                    {
                        var fileName    = ReportUnitHelper.GetDownloadFileName(targetType);
                        var reportBytes = ReportUnitHelper.GetReportChartBytes(targetType, dataSource, chartImage);

                        SendDownloadFile(fileName, reportBytes);
                    }
                }
                else
                {
                    var fileName    = ReportUnitHelper.GetDownloadFileName(targetType);
                    var reportBytes = ReportUnitHelper.GetReportGridBytes(targetType, dataSource);

                    SendDownloadFile(fileName, reportBytes);
                }
            }
            else if (pnlMainGrid.Visible)
            {
                if (targetType == "Image")
                {
                    return;
                }

                var dataSource = reportGridsControl.DataSource as DataSet;
                if (dataSource == null)
                {
                    return;
                }

                var fileName    = ReportUnitHelper.GetDownloadFileName(targetType);
                var reportBytes = ReportUnitHelper.GetReportGridBytes(targetType, dataSource);

                SendDownloadFile(fileName, reportBytes);
            }
        }
        protected IEnumerable <DataRowView> GetCollection(BindingInfoEntity entity, String groupMember, String xMember)
        {
            var sqlDs = ReportUnitHelper.CreateDataSource(entity.SqlQuery);

            var dataView = (DataView)sqlDs.Select(new DataSourceSelectArguments());

            if (dataView == null)
            {
                return(null);
            }

            if (!String.IsNullOrWhiteSpace(groupMember))
            {
                FillCaptionsList(dataView, groupMember);
            }

            FillXYValuesList(dataView, xMember);

            var selCaptions = GetSelectedCaptions().ToHashSet();
            var selXYValues = GetSelectedXYSeries().ToHashSet();

            var collection = dataView.Cast <DataRowView>();

            if (selCaptions.Count > 0)
            {
                collection = (from n in collection
                              let v = Convert.ToString(n[groupMember])
                                      where selCaptions.Contains(v)
                                      select n);
            }

            if (selXYValues.Count > 0)
            {
                collection = (from n in collection
                              let v = Convert.ToString(n[xMember])
                                      where selXYValues.Contains(v)
                                      select n);
            }

            return(collection);
        }
        protected void BindGridData(BindingInfoEntity entiry)
        {
            var sqlDs = ReportUnitHelper.CreateDataSource(entiry.SqlQuery);

            var dataView = (DataView)sqlDs.Select(new DataSourceSelectArguments());

            if (dataView == null)
            {
                return;
            }

            lblReportTitle.Text = entiry.Name;

            var dataTable = ReportUnitHelper.GetGridDataTable(entiry, dataView.Cast <DataRowView>());

            var dataSet = new DataSet();

            dataSet.Tables.Add(dataTable);

            BindGridData(dataSet);
        }
        protected void BindChartData(DataTable dataTable, String defChartType, String groupMember, String xMember, String yMember, int?xLabelAngle)
        {
            var selReportType = GetSelectedReportTypes().FirstOrDefault();

            var reportType = ReportUnitHelper.GetChartType(selReportType, defChartType);

            var chartType = reportType.GetValueOrDefault(SeriesChartType.Line);

            FillChartData(dataTable, chartType, xLabelAngle);

            mainChart.ApplyPaletteColors();

            if (selReportType == "Grid")
            {
                pnlMainGrid.Visible   = true;
                pnlChartImage.Visible = false;
            }
            else
            {
                pnlMainGrid.Visible   = false;
                pnlChartImage.Visible = true;
            }
        }