private PointF GetDragDropLocation(DragEventArgs e, XRControl control, XRControl parent)
        {
            PointF bandPoint = EvalBandPoint(e, parent.Band);

            bandPoint = BandViewSvc.SnapBandPoint(bandPoint, parent.Band, control, new XRControl[] { control });
            PointF screenPoint = BandViewSvc.ControlViewToScreen(bandPoint, parent.Band);

            return(BandViewSvc.ScreenToControl(new RectangleF(screenPoint, SizeF.Empty), parent).Location);
        }
        public override void HandleDragDrop(object sender, DragEventArgs e)
        {
            ResetUI(e);

            XRControl parent = BandViewSvc.GetControlByScreenPoint(new Point(e.X, e.Y));

            if (parent == null)
            {
                return;
            }

            XRRichText demoRichText = new XRRichText();
            PointF     location     = GetDragDropLocation(e, demoRichText, parent);

            DesignToolHelper.AddToContainer(Host, demoRichText);

            demoRichText.LocationF = location;
            demoRichText.Size      = new Size(100, 25);
            demoRichText.DataBindings.Add("Rtf", null, "test");
        }
        public override void HandleDragDrop(object sender, DragEventArgs e)
        {
            ResetUI(e);

            DataInfo[] droppedData   = e.Data.GetData(typeof(DataInfo[])) as DataInfo[];
            XRControl  parentControl = BandViewSvc.GetControlByScreenPoint(new Point(e.X, e.Y));

            ISelectionService selectSvc = Host.GetService(typeof(ISelectionService)) as ISelectionService;

            if (((parentControl is XRPanel) || (parentControl is Band)) && ((droppedData.Length == 1)))
            {
                AddSingleField(e, droppedData, parentControl, selectSvc);
            }
            else if (((parentControl is XRPanel) || (parentControl is Band)) && ((droppedData.Length > 1)))
            {
                AddMultipleFields(e, droppedData, parentControl, selectSvc);
            }
            else
            {
                base.HandleDragDrop(sender, e);
            }
        }
        private void AddMultipleFields(DragEventArgs e, DataInfo[] droppedData, XRControl parentControl, ISelectionService selectSvc)
        {
            XRTableCell headerCell;
            XRControl   parent = BandViewSvc.GetControlByScreenPoint(new Point(e.X, e.Y));

            if (parent == null)
            {
                return;
            }
            SizeF size = new SizeF(100F * droppedData.Length, 25F);

            if (parentControl is DetailBand)
            {
                size.Width = CalculateWidth(parentControl);
            }

            XRTable detailTable = new XRTable()
            {
                Name = "DetailTable"
            };

            detailTable.BeginInit();
            XRTableRow detailRow = new XRTableRow();

            detailTable.Rows.Add(detailRow);

            this.droppedControl = detailTable;
            detailTable.SizeF   = size;

            Host.Container.Add(detailTable);
            Host.Container.Add(detailRow);

            for (int i = 0; i < droppedData.Length; i++)
            {
                XRTableCell cell       = new XRTableCell();
                string      expression = ExpressionBindingHelper.NormalizeDataMember(droppedData[i].Member, parent.Report.DataMember);
                cell.ExpressionBindings.Add(
                    new ExpressionBinding("Text",
                                          expression));
                detailRow.Cells.Add(cell);
                Host.Container.Add(cell);
            }
            detailTable.EndInit();

            PointF dropPoint = GetDragDropLocation(e, detailTable, parentControl);

            this.DropXRControl(parentControl, new PointF(0, dropPoint.Y));
            selectSvc.SetSelectedComponents(new XRControl[] { detailTable });
            if ((parentControl is DetailBand))
            {
                PageHeaderBand band = null;
                if ((parentControl as DetailBand).Report.Bands.OfType <PageHeaderBand>().FirstOrDefault() != null)
                {
                    band = (parentControl as DetailBand).Report.Bands[BandKind.PageHeader] as PageHeaderBand;
                }
                else
                {
                    band = new PageHeaderBand();
                    (parentControl as DetailBand).Report.Bands.Add(band);
                    Host.Container.Add(band);
                }

                XRTable headerTable = new XRTable()
                {
                    Name = "HeaderTable"
                };
                headerTable.BeginInit();

                XRTableRow headerRow = new XRTableRow();
                headerTable.Rows.Add(headerRow);

                headerTable.SizeF = size;

                Host.Container.Add(headerTable);
                Host.Container.Add(headerRow);

                for (int i = 0; i < droppedData.Length; i++)
                {
                    headerCell = CreateTableCell(Host, headerRow, droppedData[i].DisplayName);
                }
                headerTable.Borders = BorderSide.All;
                headerTable.EndInit();

                band.Controls.Add(headerTable);
                headerTable.LocationF = droppedControl.LocationF;
            }
        }