This is a migrated thread and some comments may be shown as answers.

Visible false columns to export

0 Answers 82 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Amitkumar
Top achievements
Rank 1
Amitkumar asked on 20 Aug 2012, 02:33 PM
HI
visible false column exporting in my application.

if i have 3 columns in my RadGridView, how do i export only the 2 columns?

I only want to visible false the column for export purpose only 
Here i attached my code.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Xml.Linq;
 
namespace RadGridViewPrint
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
 
            DataContext = new MyDataContext();
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            PrintExportExtensions ex = new PrintExportExtensions();
            ex.Print(RadGridView1);
        }
 
        private void Button2_Click(object sender, RoutedEventArgs e)
        {
            PrintExportExtensions ex = new PrintExportExtensions();
 
            var hiddenColumns = new[] { "CustomerID" };
            foreach (var columnName in hiddenColumns)
            {
                this.RadGridView1.Columns[columnName].IsVisible = false;
            }
 
            ex.ExportToExcel(RadGridView1);
 
            foreach (var columnName in hiddenColumns)
            {
                this.RadGridView1.Columns[columnName].IsVisible = true;
            }
            
        }
 
        private void Button3_Click(object sender, RoutedEventArgs e)
        {
            PrintExportExtensions ex = new PrintExportExtensions();
            ex.Export(RadGridView1);
        }
    }
    public class MyDataContext
    {
        ObservableCollection<Customer> _Customers;
        public ObservableCollection<Customer> Customers
        {
            get
            {
                if (_Customers == null)
                {
                    _Customers = new ObservableCollection<Customer>();
 
                    var document = XDocument.Load("Customers.xml");
                    foreach (var element in document.Descendants("Customers"))
                    {
                        var customer = new Customer();
                        customer.CustomerID = element.Element("CustomerID").Value;
                        customer.CompanyName = element.Element("CompanyName").Value;
                        customer.Country = element.Element("Country").Value;
                        customer.City = element.Element("City").Value;
                        customer.ContactName = element.Element("ContactName").Value;
                        customer.ContactTitle = element.Element("ContactTitle").Value;
                        customer.Address = element.Element("Address").Value;
                        customer.PostalCode = element.Element("PostalCode") != null ? element.Element("PostalCode").Value : null;
                        customer.Phone = element.Element("Phone").Value;
                        customer.Fax = element.Element("Fax") != null ? element.Element("Fax").Value : null;
                        customer.Bool = (bool)element.Element("Bool");
 
                        _Customers.Add(customer);
                    }
                }
 
                return _Customers;
            }
        }
    }
 
}

Print extension class is.

using System.Collections.Generic;
using System.Linq;
using Telerik.Windows.Controls;
using System.Windows.Media;
using Telerik.Windows.Data;
using Telerik.Windows.Documents.Model;
using System.Collections;
using Telerik.Windows.Documents.FormatProviders.Pdf;
using Telerik.Windows.Documents.FormatProviders.Html;
using System.IO;
using System.ComponentModel;
using System.Windows;
using System;
using Microsoft.Win32;
using System.Windows.Controls;
using Telerik.Windows.Documents.FormatProviders;
using Telerik.Windows.Controls.GridView;
 
namespace RadGridViewPrint
{
    public class PrintExportExtensions : DependencyObject, INotifyPropertyChanged
    {
        public PrintExportExtensions()
        {
            //DocumentFormatProvidersManager.RegisterFormatProvider(new HtmlFormatProvider());
 
            this.HeaderBackground = Color.FromArgb(255, 127, 127, 127);
            this.RowBackground = Color.FromArgb(255, 251, 247, 255);
            this.GroupHeaderBackground = Color.FromArgb(255, 216, 216, 216);
        }
 
        private void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
 
        private Color _headerBackground;
        private Color _rowBackground;
        private Color _groupHeaderBackground;
 
        public Color GroupHeaderBackground
        {
            get
            {
                return this._groupHeaderBackground;
            }
            set
            {
                if (this._groupHeaderBackground != value)
                {
                    this._groupHeaderBackground = value;
                    OnPropertyChanged("GroupHeaderBackground");
                }
            }
        }
 
        public Color HeaderBackground
        {
            get
            {
                return this._headerBackground;
            }
            set
            {
                if (this._headerBackground != value)
                {
                    this._headerBackground = value;
                    OnPropertyChanged("HeaderBackground");
                }
            }
        }
 
        public Color RowBackground
        {
            get
            {
                return this._rowBackground;
            }
            set
            {
                if (this._rowBackground != value)
                {
                    this._rowBackground = value;
                    OnPropertyChanged("RowBackground");
                }
            }
        }
 
 
        public void Export(object parameter)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.DefaultExt = "*.pdf";
            dialog.Filter = "Adobe PDF Document (*.pdf)|*.pdf";
 
            if (dialog.ShowDialog() == true)
            {
                RadDocument document = CreateDocument(parameter as RadGridView);
 
                document.LayoutMode = DocumentLayoutMode.Paged;
 
                document.Measure(RadDocument.MAX_DOCUMENT_SIZE);
                document.Arrange(new RectangleF(PointF.Empty, document.DesiredSize));
                document.SectionDefaultPageOrientation = PageOrientation.Landscape;
                Telerik.Windows.Documents.Layout.Padding padding = new Telerik.Windows.Documents.Layout.Padding(20);
                document.SectionDefaultPageMargin = padding;
                document.SectionDefaultPageSize = new Size(826, 1160);
                PdfFormatProvider provider = new PdfFormatProvider();
 
                using (Stream output = dialog.OpenFile())
                {
                    provider.Export(document, output);
                }
            }
        }
 
        public void ExportToExcel(object parameter)
        {
            try
            {
                SaveFileDialog dialog = new SaveFileDialog();
                dialog.DefaultExt = "*.xls";
                dialog.Filter = "Adobe PDF Document (*.xls)|*.xls";
 
                if (dialog.ShowDialog() == true)
                {
                    RadDocument document = CreateDocument(parameter as RadGridView);
 
                    document.LayoutMode = DocumentLayoutMode.Paged;
 
                    document.Measure(RadDocument.MAX_DOCUMENT_SIZE);
                    document.Arrange(new RectangleF(PointF.Empty, document.DesiredSize));
                    document.SectionDefaultPageOrientation = PageOrientation.Landscape;
                    Telerik.Windows.Documents.Layout.Padding padding = new Telerik.Windows.Documents.Layout.Padding(20);
                    document.SectionDefaultPageMargin = padding;
                    document.SectionDefaultPageSize = new Size(826, 1160);
                    HtmlFormatProvider provider = new HtmlFormatProvider();
 
                    using (Stream output = dialog.OpenFile())
                    {
                        provider.Export(document, output);
                    }
                }
 
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 
 
        bool isPrintStarted = false;
        //bool isExportStarted = false;
        public void Print(object parameter)
        {
            RadGridView grid = (RadGridView)parameter;
            RadRichTextBox rtb = new RadRichTextBox() { Height = 0 };
 
            rtb.Name = "RadRichTextBox1";
 
            Grid parent = grid.ParentOfType<Grid>();
            if (parent != null && parent.FindName(rtb.Name) == null)
            {
                parent.Children.Add(rtb);
                rtb.ApplyTemplate();
            }
 
            rtb.Dispatcher.BeginInvoke((Action)(() =>
                {
                    rtb.Document = CreateDocument(grid);
                }));
            RadWindow window = new RadWindow();
            Grid g = new Grid();
            //g.ColumnDefinitions.Add(new ColumnDefinition());
            g.ColumnDefinitions.Add(new ColumnDefinition());
            g.RowDefinitions.Add(new RowDefinition());
            g.HorizontalAlignment = HorizontalAlignment.Stretch;
            g.VerticalAlignment = VerticalAlignment.Stretch;
            Button b = new Button();
            b.Height = 50;
            b.Width = 100;
            b.Content = "Print";
            b.Click += (s, e) =>
            {
                rtb.Commands.ChangePageOrientationCommand.Execute(PageOrientation.Landscape);
                rtb.ChangeSectionPageOrientation(PageOrientation.Landscape);
                rtb.Document.SectionDefaultPageOrientation = PageOrientation.Landscape;
                Telerik.Windows.Documents.Layout.Padding padding = new Telerik.Windows.Documents.Layout.Padding(20);
                rtb.Commands.ChangePageMarginsCommand.Execute(padding);
                rtb.Document.SectionDefaultPageMargin = padding;
                rtb.ChangeSectionPageMargin(padding);
                rtb.ChangeSectionPageSize(new Size(826, 1160));
                rtb.Document.SectionDefaultPageSize = new Size(826, 1160);
                rtb.ShowComments = false;
                rtb.Commands.ChangeSectionFooterBottomMarginCommand.Execute(0);
                rtb.ChangeSectionFooterBottomMargin(0);
                rtb.Print("MyDocument", Telerik.Windows.Documents.UI.PrintMode.Native);
                isPrintStarted = true;
                window.Close();
            };
            rtb.PrintCompleted += (s, e) =>
                {
                    parent.Children.Remove(rtb);
                    isPrintStarted = false;
                };
            window.Closed += (s, e) =>
                {
                    if (!isPrintStarted)
                    {
                        parent.Children.Remove(rtb);
                    }
                    else
                    {
                        //wait print complete to remove the children
                        ;
                    }
                };
            g.Children.Add(b);
            Grid.SetRow(b, 0);
            Grid.SetColumn(b, 0);
            //Button b2 = new Button();
            //b2.Content = "Preview";
            //b2.Click += (s, e) =>
            //{
            //    isExportStarted = true;
            //    Export(grid);               
            //    window.Close();
            //};
            //grid.ElementExported += (s, e) =>
            //    {
            //        parent.Children.Remove(rtb);
            //        isExportStarted = false;
            //    };
            //g.Children.Add(b2);
            //Grid.SetRow(b2, 0);
            //Grid.SetColumn(b2, 1);
            window.Content = g;
            window.Height = 110;
            window.Width = 250;
            window.Header = "Print";
            window.WindowStartupLocation = Telerik.Windows.Controls.WindowStartupLocation.CenterScreen;
            window.ShowDialog();
        }
 
        private RadDocument CreateDocument(RadGridView grid)
        {
            List<GridViewBoundColumnBase> columns = (from c in grid.Columns.OfType<GridViewBoundColumnBase>()
                                                     orderby c.DisplayIndex
                                                     select c).ToList();
 
            Telerik.Windows.Documents.Model.Table table = new Telerik.Windows.Documents.Model.Table();
 
            RadDocument document = new RadDocument();
            Telerik.Windows.Documents.Model.Section section = new Telerik.Windows.Documents.Model.Section();
            section.Blocks.Add(table);
            document.Sections.Add(section);
 
            if (grid.ShowColumnHeaders)
            {
                Telerik.Windows.Documents.Model.TableRow headerRow = new Telerik.Windows.Documents.Model.TableRow();
 
                if (grid.GroupDescriptors.Count > 0)
                {
                    Telerik.Windows.Documents.Model.TableCell indentCell = new Telerik.Windows.Documents.Model.TableCell();
                    indentCell.PreferredWidth = new TableWidthUnit(grid.GroupDescriptors.Count * 20);
                    indentCell.Background = HeaderBackground;
                    headerRow.Cells.Add(indentCell);
                }
 
                for (int i = 0; i < columns.Count; i++)
                {
                    Telerik.Windows.Documents.Model.TableCell cell = new Telerik.Windows.Documents.Model.TableCell();
                    cell.Background = HeaderBackground;
                    if (columns[i].Header is string)
                        AddCellValue(cell, columns[i].Header.ToString());
                    else
                        AddCellValue(cell, columns[i].UniqueName);
                    //cell.PreferredWidth = new TableWidthUnit((float)columns[i].ActualWidth);
                    TableWidthUnit t = new TableWidthUnit(TableWidthUnitType.Auto);
                    cell.PreferredWidth = t;
                    headerRow.Cells.Add(cell);
                }
 
                table.Rows.Add(headerRow);
            }
 
            if (grid.Items.Groups != null)
            {
                for (int i = 0; i < grid.Items.Groups.Count; i++)
                {
                    AddGroupRow(table, grid.Items.Groups[i] as QueryableCollectionViewGroup, columns, grid);
                }
            }
            else
            {
                AddDataRows(table, grid.Items, columns, grid);
            }
 
            foreach (GridViewBoundColumnBase b in columns)
            {
                TableWidthUnit unit = new TableWidthUnit(TableWidthUnitType.Auto);
                table.SetGridColumnWidth(b.DisplayIndex, unit);
            }
            return document;
        }
 
        private void AddDataRows(Telerik.Windows.Documents.Model.Table table, IList items, IList<GridViewBoundColumnBase> columns, RadGridView grid)
        {
            for (int i = 0; i < items.Count; i++)
            {
                Telerik.Windows.Documents.Model.TableRow row = new Telerik.Windows.Documents.Model.TableRow();
 
                if (grid.GroupDescriptors.Count > 0)
                {
                    Telerik.Windows.Documents.Model.TableCell indentCell = new Telerik.Windows.Documents.Model.TableCell();
                    indentCell.PreferredWidth = new TableWidthUnit(grid.GroupDescriptors.Count * 20);
                    indentCell.Background = RowBackground;
                    row.Cells.Add(indentCell);
                }
 
                for (int j = 0; j < columns.Count; j++)
                {
                    object value = columns[j].GetValueForItem(items[i]);
                    if (value is string || value is int || value is double || value is double? || value is int?)
                    {
                        Telerik.Windows.Documents.Model.TableCell cell = new Telerik.Windows.Documents.Model.TableCell();
                        AddCellValue(cell, value != null ? value.ToString() : string.Empty);
                        cell.PreferredWidth = new TableWidthUnit((float)columns[j].ActualWidth);
                        cell.Background = RowBackground;
 
                        row.Cells.Add(cell);
                    }
                    else
                    {
                        Telerik.Windows.Documents.Model.TableCell cell = new Telerik.Windows.Documents.Model.TableCell();
                        AddCellValue(cell, value != null ? "/" : string.Empty);
                        cell.PreferredWidth = new TableWidthUnit((float)columns[j].ActualWidth);
                        cell.Background = RowBackground;
 
                        row.Cells.Add(cell);
                    }
                }
 
                table.Rows.Add(row);
            }
        }
 
        private void AddGroupRow(Telerik.Windows.Documents.Model.Table table, QueryableCollectionViewGroup group, IList<GridViewBoundColumnBase> columns, RadGridView grid)
        {
            Telerik.Windows.Documents.Model.TableRow row = new Telerik.Windows.Documents.Model.TableRow();
 
            int level = GetGroupLevel(group);
            if (level > 0)
            {
                Telerik.Windows.Documents.Model.TableCell cell = new Telerik.Windows.Documents.Model.TableCell();
                cell.PreferredWidth = new TableWidthUnit(level * 20);
                cell.Background = GroupHeaderBackground;
                row.Cells.Add(cell);
            }
 
            Telerik.Windows.Documents.Model.TableCell aggregatesCell = new Telerik.Windows.Documents.Model.TableCell();
            aggregatesCell.Background = GroupHeaderBackground;
            aggregatesCell.ColumnSpan = columns.Count + (grid.GroupDescriptors.Count > 0 ? 1 : 0) - (level > 0 ? 1 : 0);
 
            AddCellValue(aggregatesCell, group.Key != null ? group.Key.ToString() : string.Empty);
 
            foreach (AggregateResult result in group.AggregateResults)
            {
                AddCellValue(aggregatesCell, result.FormattedValue != null ? result.FormattedValue.ToString() : string.Empty);
            }
 
            row.Cells.Add(aggregatesCell);
 
            table.Rows.Add(row);
 
            if (group.HasSubgroups)
            {
                foreach (var g in group.Subgroups)
                {
                    AddGroupRow(table, g as QueryableCollectionViewGroup, columns, grid);
                }
            }
            else
            {
                AddDataRows(table, group.Items, columns, grid);
            }
        }
 
        private void AddCellValue(Telerik.Windows.Documents.Model.TableCell cell, string value)
        {
            Telerik.Windows.Documents.Model.Paragraph paragraph = new Telerik.Windows.Documents.Model.Paragraph();
            cell.Blocks.Add(paragraph);
 
            Telerik.Windows.Documents.Model.Span span = new Telerik.Windows.Documents.Model.Span();
            if (value == null || value == string.Empty)
                value = "/";
 
            span.Text = value;
 
            paragraph.Inlines.Add(span);
        }
 
        private int GetGroupLevel(IGroup group)
        {
            int level = 0;
 
            IGroup parent = group.ParentGroup;
 
            while (parent != null)
            {
                level++;
                parent = parent.ParentGroup;
            }
 
            return level;
        }
 
        #region INotifyPropertyChanged Members
 
        public event PropertyChangedEventHandler PropertyChanged;
 
        #endregion
    }
}

I am waiting for your reply.
thank you
Amit

No answers yet. Maybe you can help?

Tags
GridView
Asked by
Amitkumar
Top achievements
Rank 1
Share this question
or