Beispiel #1
0
        public static ListView createListView(IList sourceView, ViewBase view, int itemsApproximation, ref int itemIndex, Rect size, out BindingList <object> list)
        {
            ListView listview = new ListView();

            // Setting view
            if (view != null)
            {
                listview.View = UIUtility.CreateDeepCopy <ViewBase>(view);
                listview.UpdateLayout();
            }

            // Create Itemssource
            list = new BindingList <object>();
            BindingListCollectionView collectionViewSource = new BindingListCollectionView(list);

            listview.ItemsSource = collectionViewSource;
            //listview.GroupStyle.Add(printableListView.PrintGroupStyle);

            StackPanel body = new StackPanel();

            body.Children.Add(listview);

            // Add the estimated items to the listview
            int currentPosition = itemIndex;

            for (int i = 0; i < itemsApproximation && i + currentPosition < sourceView.Count; i++)
            {
                object item = sourceView[itemIndex];
                list.Add(item);
                itemIndex++;
            }
            collectionViewSource.Refresh();

            // Calculate the size of listview
            listview.Measure(new Size());
            body.Arrange(new Rect());

            // Recorrect the items inside listview
            while (listview.ActualHeight < size.Height && itemIndex < sourceView.Count)
            {
                object item = sourceView[itemIndex];
                list.Add(item);
                itemIndex++;
                collectionViewSource.Refresh();
                listview.Measure(new Size());
                body.Arrange(size);
            }

            while (listview.ActualHeight > size.Height && itemIndex >= 0)
            {
                list.Remove(list[list.Count - 1]);
                itemIndex--;
                collectionViewSource.Refresh();
                listview.Measure(new Size());
                body.Arrange(size);
            }
            body.Children.Clear();

            return(listview);
        }
Beispiel #2
0
        //protected double PrintablePageWidth;
        //protected double PrintablePageHeight;

        public DocumentPaginatorExtention(PrintableListView listview, Thickness margin, Size printPageArea)
        {
            printableListView = listview;
            PageMargin        = margin;
            pageHeight        = printPageArea.Height - PageMargin.Top - PageMargin.Bottom;
            PageSize          = printPageArea;


            headerSize = listview.HeaderSize;
            footerSize = listview.FooterSize;

            if (listview.PageHeaderTemplate != null)
            {
                pageHeight -= headerSize.Height;
            }

            if (listview.PageFooterTemplate != null)
            {
                pageHeight -= footerSize.Height;
            }


            if (listview.ReportBody == null)
            {
                listview.ReportBody = UIUtility.CreateDeepCopy(listview.View);
            }
            for (int index = 0; index < (listview.View as GridView).Columns.Count; index++)
            {
                var col = (listview.View as GridView).Columns[index];
                (listview.ReportBody as GridView).Columns[index].Width = col.ActualWidth;
            }
            ListCollectionView   originalData = new ListCollectionView((IList)listview.ItemsSource);// (ListCollectionView)listview.ItemsSource;
            CollectionViewSource source       = new CollectionViewSource();

            source.Source = originalData.SourceCollection;//(listview.ItemsSource as ListCollectionView)
            if (printableListView.Group != null && printableListView.Group.GroupDescriptions != null)
            {
                foreach (GroupDescription groupDescription in printableListView.Group.GroupDescriptions)
                {
                    source.GroupDescriptions.Add(groupDescription);
                }
            }

            if (printableListView.Group != null)
            {
                printableListView.Group.groupIndex = 0;
                printableListView.Group.groupPage  = 0;
            }

            sourceView = source.View as ListCollectionView;
            createPages();
            pageCount               = Pages.Count;
            isPageCountValid        = true;
            documentPaginatorSource = new DocumentPaginatorSource(this);

            sourceView.MoveCurrentToFirst();
            groupIndex            = 0;
            currentGroupPageCount = 0;
        }
Beispiel #3
0
        internal FrameworkElement Render(object parentDataContext, CollectionView sourceView, ViewBase view, int itemsApproximation, ref int itemIndex, Rect size, out BindingList <object> list)
        {
            // The index of the grid row of the ListView
            int    listViewRowIndex = 0;
            double pageHeight       = size.Height;

            // The layout of the group
            Grid grid = new Grid();

            grid.RowDefinitions.Add(new RowDefinition());
            grid.RowDefinitions[listViewRowIndex].Height = new GridLength(1, GridUnitType.Star);

            CollectionViewGroup group = sourceView.Groups[groupIndex] as CollectionViewGroup;

            // Add header
            if (groupPage == 0 && GroupHeader != null)
            {
                ContentControl groupHeaderControl = new ContentControl();
                groupHeaderControl.ContentTemplate = GroupHeader;
                groupHeaderControl.Height          = HeaderSize.Height;
                pageHeight -= HeaderSize.Height;
                groupHeaderControl.Content = new HeaderFooterDataContext(parentDataContext, group.Items);

                RowDefinition row = new RowDefinition();
                row.Height = new GridLength(HeaderSize.Height, GridUnitType.Pixel);
                grid.RowDefinitions.Insert(0, row);
                grid.Children.Add(groupHeaderControl);
                Grid.SetRow(groupHeaderControl, 0);
                listViewRowIndex++;
            }

            // Page header
            if (GroupPageHeader != null)
            {
                pageHeight -= this.PageHeaderSize.Height;
            }

            // Page footer
            if (GroupPageFooter != null)
            {
                pageHeight -= this.PageFooterSize.Height;
            }

            list = new BindingList <object>();
            ListView listview = UIUtility.createListView(group.Items, UIUtility.CreateDeepCopy <ViewBase>(view), itemsApproximation, ref itemIndex, new Rect(size.Left, size.Top, size.Width, pageHeight), out list);

            HeaderFooterDataContext headerFooterContent = new HeaderFooterDataContext(parentDataContext, list);

            headerFooterContent.IsFirstPage = groupPage == 0;

            // group page header
            if (GroupPageHeader != null)
            {
                ContentControl groupPageHeaderControl = new ContentControl();
                groupPageHeaderControl.ContentTemplate = GroupPageHeader;
                groupPageHeaderControl.Height          = this.PageFooterSize.Height;
                pageHeight -= this.PageHeaderSize.Height;
                groupPageHeaderControl.Content = headerFooterContent;

                RowDefinition row = new RowDefinition();
                row.Height = new GridLength(PageHeaderSize.Height, GridUnitType.Pixel);
                grid.RowDefinitions.Insert(listViewRowIndex, row);
                grid.Children.Add(groupPageHeaderControl);
                Grid.SetRow(groupPageHeaderControl, listViewRowIndex);
                listViewRowIndex++;
            }

            // group page footer
            if (GroupPageFooter != null)
            {
                ContentControl groupPageFooterControl = new ContentControl();
                groupPageFooterControl.ContentTemplate = GroupPageFooter;
                groupPageFooterControl.Height          = this.PageFooterSize.Height;
                pageHeight -= this.PageHeaderSize.Height;
                groupPageFooterControl.Content = headerFooterContent;

                RowDefinition row = new RowDefinition();
                row.Height = new GridLength(PageFooterSize.Height, GridUnitType.Pixel);
                grid.RowDefinitions.Insert(listViewRowIndex + 1, row);
                grid.Children.Add(groupPageFooterControl);
                Grid.SetRow(groupPageFooterControl, listViewRowIndex + 1);
            }

            // Group footer
            if (itemIndex >= group.ItemCount - 1)
            {
                headerFooterContent.IsLastPage = true;
                if (GroupFooter != null &&
                    listview.ActualHeight + FooterSize.Height <= pageHeight)
                {
                    groupPage = 0;
                    groupIndex++;
                    itemIndex = 0;
                    ContentControl groupFooterControl = new ContentControl();
                    groupFooterControl.ContentTemplate = GroupHeader;
                    groupFooterControl.Height          = FooterSize.Height;
                    pageHeight -= HeaderSize.Height;
                    groupFooterControl.Content = new HeaderFooterDataContext(parentDataContext, group.Items);

                    RowDefinition row = new RowDefinition();
                    row.Height = new GridLength(FooterSize.Height, GridUnitType.Pixel);
                    grid.RowDefinitions.Add(row);
                    grid.Children.Add(groupFooterControl);
                    Grid.SetRow(groupFooterControl, grid.RowDefinitions.Count - 1);
                }
                else
                {
                    list.Remove(list[list.Count - 1]);
                    itemIndex--;
                    (listview.ItemsSource as CollectionView).Refresh();
                    groupPage++;
                }
            }
            else
            {
                groupPage++;
            }

            grid.Children.Add(listview);
            Grid.SetRow(listview, listViewRowIndex);

            return(grid);
        }