Does ExportToExcelML support exporting child templates?

11 posts, 0 answers
  1. Deepak
    Deepak avatar
    4 posts
    Member since:
    Jan 2011

    Posted 08 Feb 2011 Link to this post

    If yes, then when I try to export, I get this error...

    System.InvalidOperationException: {"Could not find neighbour element!"}

    and the stack trace is at

    Telerik.WinControls.UI.Export.ExportToExcelML.SearchForNeighbourElement(List`1 radElementList, Int32 index) at Telerik.WinControls.UI.Export.ExportToExcelML.CreateStyleElement(GridViewRowInfo gridViewRowInfo, Int32 cellIndex) at Telerik.WinControls.UI.Export.ExportToExcelML.CreateRowElement(WorkBookElement workbook, GridViewRowInfo gridViewRowInfo) at Telerik.WinControls.UI.Export.ExportToExcelML.AddWorkSheetWithHeaderRow(WorkBookElement workbook, FileStream fileStream, Int32& currentSheet, Int32& currentRow) at Telerik.WinControls.UI.Export.ExportToExcelML.RunExport(String fileName)


    The code being used is
    Dim cc As New ExportToExcelML(grid)
     cc.ExportVisualSettings = True
     cc.RunExport(saveFileDialog1.FileName)
  2. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 08 Feb 2011 Link to this post

    Hi Deepak,

    As far as I'm aware, exporting hierarcical data is not supported because Excel does not support hierarcical data. However, yuo should not be getting an error. The exporter should be just exporting the Master Tempalte rows.

    Please can you try the following

    Designer File
    namespace RadGridView_hierarchy_C
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components;
      
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
      
            #region Windows Form Designer generated code
      
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                Telerik.WinControls.UI.GridViewDecimalColumn gridViewDecimalColumn1 = new Telerik.WinControls.UI.GridViewDecimalColumn();
                Telerik.WinControls.UI.GridViewDecimalColumn gridViewDecimalColumn2 = new Telerik.WinControls.UI.GridViewDecimalColumn();
                Telerik.WinControls.UI.GridViewTextBoxColumn gridViewTextBoxColumn1 = new Telerik.WinControls.UI.GridViewTextBoxColumn();
                Telerik.WinControls.UI.GridViewDecimalColumn gridViewDecimalColumn3 = new Telerik.WinControls.UI.GridViewDecimalColumn();
                Telerik.WinControls.UI.GridViewDecimalColumn gridViewDecimalColumn4 = new Telerik.WinControls.UI.GridViewDecimalColumn();
                this.radGridView1 = new Telerik.WinControls.UI.RadGridView();
                ((System.ComponentModel.ISupportInitialize)(this.radGridView1)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.radGridView1.MasterTemplate)).BeginInit();
                this.SuspendLayout();
                //  
                // radGridView1 
                //  
                this.radGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                            | System.Windows.Forms.AnchorStyles.Left)
                            | System.Windows.Forms.AnchorStyles.Right)));
                this.radGridView1.Location = new System.Drawing.Point(12, 35);
                //  
                // radGridView1 
                //  
      
                gridViewDecimalColumn1.DecimalPlaces = 0;
                gridViewDecimalColumn1.FieldName = "ID";
                gridViewDecimalColumn1.FormatString = "";
                gridViewDecimalColumn1.HeaderText = "ID";
                gridViewDecimalColumn1.IsVisible = false;
                gridViewDecimalColumn1.Name = "ID";
                gridViewDecimalColumn1.TextAlignment = System.Drawing.ContentAlignment.MiddleRight;
                gridViewDecimalColumn2.DecimalPlaces = 0;
                gridViewDecimalColumn2.FieldName = "ID2";
                gridViewDecimalColumn2.FormatString = "";
                gridViewDecimalColumn2.HeaderText = "ID2";
                gridViewDecimalColumn2.IsVisible = false;
                gridViewDecimalColumn2.Name = "ID2";
                gridViewDecimalColumn2.TextAlignment = System.Drawing.ContentAlignment.MiddleRight;
                gridViewTextBoxColumn1.FieldName = "Name";
                gridViewTextBoxColumn1.FormatString = "";
                gridViewTextBoxColumn1.HeaderText = "Name";
                gridViewTextBoxColumn1.Name = "Name";
                gridViewTextBoxColumn1.ReadOnly = true;
                gridViewTextBoxColumn1.Width = 100;
                gridViewDecimalColumn3.FieldName = "Price";
                gridViewDecimalColumn3.FormatString = "";
                gridViewDecimalColumn3.HeaderText = "Price";
                gridViewDecimalColumn3.Name = "Price";
                gridViewDecimalColumn3.TextAlignment = System.Drawing.ContentAlignment.MiddleRight;
                gridViewDecimalColumn3.Width = 150;
                gridViewDecimalColumn4.DecimalPlaces = 0;
                gridViewDecimalColumn4.FieldName = "Qty";
                gridViewDecimalColumn4.FormatString = "";
                gridViewDecimalColumn4.HeaderText = "Qty";
                gridViewDecimalColumn4.Maximum = new decimal(new int[] { 
            100, 
            0, 
            0, 
            0});
                gridViewDecimalColumn4.Minimum = new decimal(new int[] { 
            1, 
            0, 
            0, 
            0});
                gridViewDecimalColumn4.Name = "Qty";
                gridViewDecimalColumn4.TextAlignment = System.Drawing.ContentAlignment.MiddleRight;
                gridViewDecimalColumn4.Width = 150;
                this.radGridView1.MasterTemplate.Columns.AddRange(new Telerik.WinControls.UI.GridViewDataColumn[] { 
            gridViewDecimalColumn1, 
            gridViewDecimalColumn2, 
            gridViewTextBoxColumn1, 
            gridViewDecimalColumn3, 
            gridViewDecimalColumn4});
                this.radGridView1.Name = "radGridView1";
                //
                //  
                //  
                //  
                //
                this.radGridView1.Size = new System.Drawing.Size(604, 379);
                this.radGridView1.TabIndex = 0;
                this.radGridView1.Text = "radGridView1";
                //  
                // Form1 
                //  
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(628, 426);
                this.Controls.Add(this.radGridView1);
                this.Name = "Form1";
                this.Text = "Form1";
                //this.Load += new System.EventHandler(this.Form1_Load); 
                ((System.ComponentModel.ISupportInitialize)(this.radGridView1.MasterTemplate)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.radGridView1)).EndInit();
      
                this.ResumeLayout(false);
            }
      
            #endregion
      
            private Telerik.WinControls.UI.RadGridView radGridView1;
        }
    }

    Form.cs
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Telerik.WinControls;
    using Telerik.WinControls.UI;
    using Telerik.WinControls.RadControlSpy;
    using System.Globalization;
    using Telerik.WinControls.UI.Export;
    using Telerik.WinControls.Data;
      
    namespace RadGridView_hierarchy_C
    {
        public partial class Form1 : Form
        {
              
      
            public Form1()
            {
                InitializeComponent();
                this.Load += new System.EventHandler(this.Form1_Load);
      
            }
      
            private void Form1_Load(object sender, EventArgs e)
            {
      
                List<Person> People = new List<Person>();
                List<Car> Cars = new List<Car>();
                List<CarYear> CarYears = new List<CarYear>();
      
                // load primary data source 
                People.Add(new Person(1, 101, "Bob", 204.50M, 1));
                People.Add(new Person(2, 102, "Rob", 208.00M, 1));
                People.Add(new Person(3, 103, "Eric", 300.00M, 1));
                this.radGridView1.DataSource = People;
      
                GridViewTemplate carTemplate = new GridViewTemplate();
                Cars.Add(new Car(101, 1, "Ford", 100.50M, 1));
                Cars.Add(new Car(102, 2, "BMW", 104, 1));
                Cars.Add(new Car(102, 6, "BMW", 104, 1));
                Cars.Add(new Car(102, 7, "BMW", 104, 1));
                Cars.Add(new Car(102, 3, "Mazda", 100, 1));
                Cars.Add(new Car(102, 8, "Mazda", 100, 1));
                Cars.Add(new Car(102, 4, "Merc", 100, 1));
                Cars.Add(new Car(103, 5, "Honda", 100, 1));
                carTemplate.DataSource = Cars;
      
      
                GridViewTemplate carYearTemplate = new GridViewTemplate();
                CarYears.Add(new CarYear(1, 2004, "Ford", 100));
                CarYears.Add(new CarYear(2, 2000, "BMW", 104));
                CarYears.Add(new CarYear(2, 2001, "BMW", 104));
                CarYears.Add(new CarYear(2, 2002, "BMW", 104));
                CarYears.Add(new CarYear(2, 2003, "BMW", 104));
                CarYears.Add(new CarYear(2, 2004, "BMW", 104));
                CarYears.Add(new CarYear(2, 2005, "BMW", 104));
                CarYears.Add(new CarYear(3, 2004, "Mazda", 100));
                CarYears.Add(new CarYear(4, 2007, "Merc", 100));
                CarYears.Add(new CarYear(5, 2010, "Honda", 100));
                CarYears.Add(new CarYear(6, 2004, "M3", 100));
                CarYears.Add(new CarYear(7, 2011, "M3", 100));
                CarYears.Add(new CarYear(8, 2000, "Mazda", 100));
                CarYears.Add(new CarYear(8, 2001, "Mazda", 100));
                CarYears.Add(new CarYear(8, 2002, "Mazda", 100));
                CarYears.Add(new CarYear(8, 2003, "Mazda", 100));
                CarYears.Add(new CarYear(8, 2004, "Mazda", 100));
                CarYears.Add(new CarYear(8, 2005, "Mazda", 100));
                CarYears.Add(new CarYear(8, 2006, "Mazda", 100));
                CarYears.Add(new CarYear(8, 2007, "Mazda", 100));
                carYearTemplate.DataSource = CarYears;
      
      
                // Now create first relation 
                GridViewRelation carsRelation = new GridViewRelation(this.radGridView1.MasterTemplate);
                carsRelation.ChildTemplate = carTemplate;
                carsRelation.RelationName = "ParentChild";
                carsRelation.ParentColumnNames.Add("ID2");
                carsRelation.ChildColumnNames.Add("ID");
                this.radGridView1.Relations.Add(carsRelation);
      
                GridViewRelation carYearsRelation = new GridViewRelation(carTemplate, carYearTemplate);
                carYearsRelation.RelationName = "ChildGrandChild";
                carYearsRelation.ParentColumnNames.Add("ID2");
                carYearsRelation.ChildColumnNames.Add("ID");
                this.radGridView1.Relations.Add(carYearsRelation);
      
                this.radGridView1.MasterTemplate.Templates.Add(carTemplate);
                this.radGridView1.MasterTemplate.Templates[0].Templates.Add(carYearTemplate);
      
                this.radGridView1.MasterTemplate.Templates[0].AllowAddNewRow = false;
                this.radGridView1.MasterTemplate.Templates[0].Templates[0].AllowAddNewRow = false;
      
      
                this.radGridView1.MasterTemplate.Templates[0].Columns["ID"].IsVisible = false;
                this.radGridView1.MasterTemplate.Templates[0].Columns["ID2"].IsVisible = false;
                this.radGridView1.MasterTemplate.Templates[0].Columns["Model"].Width = 150;
                this.radGridView1.MasterTemplate.Templates[0].Columns["Model"].ReadOnly = true;
                this.radGridView1.MasterTemplate.Templates[0].Columns["Qty"].Width = 150;
                this.radGridView1.MasterTemplate.Templates[0].Columns["Price"].Width = 150;
                this.radGridView1.MasterTemplate.Templates[0].Templates[0].Columns["ID"].IsVisible = false;
                this.radGridView1.MasterTemplate.Templates[0].Templates[0].Columns["Model"].IsVisible = false;
                this.radGridView1.MasterTemplate.Templates[0].Templates[0].Columns["Year"].Width = 150;
                this.radGridView1.MasterTemplate.Templates[0].Templates[0].Columns["Year"].ReadOnly = true;
                  
                this.radGridView1.MasterView.ChildRows[1].IsExpanded = true;
                this.radGridView1.MasterView.ChildRows[1].ChildRows[0].IsExpanded = true;
      
                  
      
                this.radGridView1.AutoGenerateColumns = false;
                this.radGridView1.AutoSizeRows = true;
                this.radGridView1.EnableAlternatingRowColor = true;
                this.radGridView1.ReadOnly = false;
                this.radGridView1.AutoGenerateHierarchy = false;
      
                ExportToExcelML export = new ExportToExcelML(this.radGridView1);
                export.ExportVisualSettings = true;
                export.RunExport(@"your file path....xls");
      
            }
      
        }
      
      
        public class Person
        {
            public int ID { get; set; }
            public int ID2 { get; set; }
            public string Name { get; set; }
            public decimal Price { get; set; }
            public decimal Qty { get; set; }
      
            public Person(int id, int id2, string name, decimal price, decimal qty)
            {
                ID = id;
                ID2 = id2;
                Name = name;
                Price = price;
                Qty = qty;
            }
        }
      
        public class Car
        {
            public int ID { get; set; }
            public int ID2 { get; set; }
            public string Model { get; set; }
            public int Qty { get; set; }
            public decimal Price { get; set; }
      
            public Car(int id, int id2, string model, decimal price, int qty)
            {
                ID = id;
                ID2 = id2;
                Model = model;
                Qty = qty;
                Price = price;
            }
        }
      
        public class CarYear
        {
            public int ID { get; set; }
            public string Model { get; set; }
            public int Year { get; set; }
            public int Price { get; set; }
      
            public CarYear(int id, int year, string model, int price)
            {
                ID = id;
                Year = year;
                Model = model;
                Price = price;
            }
        }
      
    }

    Even though this is in C# (it's the quickest one I could come up with to get an answer to you) it should give you an idea to show that it can export, but only the top level rows.
    Richard
  3. Deepak
    Deepak avatar
    4 posts
    Member since:
    Jan 2011

    Posted 08 Feb 2011 Link to this post

    Hi Richard,
     Thanks for your reply. Your code does not give me an error.However, I need to find a solution to export child templates on to excel. Infragistics supports it in a way by using the Display layout. I dont know why Telerik cannot find a solution. Microsoft not supporting does not carry support. At the very least, there should be a way of exporting the visual element, converting into HTML and exporting that to excel.

    Thanks
    Deepak
  4. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 08 Feb 2011 Link to this post

    Hi Deepak,

    Have a look at this forum thread.  I think it will help you
    Richard
  5. Deepak
    Deepak avatar
    4 posts
    Member since:
    Jan 2011

    Posted 10 Feb 2011 Link to this post

    Thanks Richard, The thread doesnt really help me because it does not export the column definitions on to the spreadsheet. That is incredibly disheartening as the solution we are looking for needs to have the right column group headers on spreadsheets.
     I think we might also have a potential problem with printing if the column headers do not get printed.
  6. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 10 Feb 2011 Link to this post

    Hi Deepak,

    I'm sorry that this doesn't fulfill your requirements. I'll have a look as soon as I can to see if I can find any workaround, though this looks like quite a big one to try and solve. If I can come up with something that I think you would find useful, I'll let you know. In the meantime, I would suggest sending off a support ticket as a feature request (I haven't been able to find this in the Public Issue Tracking System).

    Regards,
    Richard
  7. Deepak
    Deepak avatar
    4 posts
    Member since:
    Jan 2011

    Posted 10 Feb 2011 Link to this post

    Thanks Richard,
        just sent a support ticket.
  8. Martin Vasilev
    Admin
    Martin Vasilev avatar
    1061 posts

    Posted 11 Feb 2011 Link to this post

    Hello Deepak,

    I have answered already in your support ticket, but I am posting it here as well to be public available:

    Curently we do not support exporting a RadGridView with ColumnGroupsViewDefinition or HtmlViewDefinition. We will consider adding this feature in one of the next releases.

    As to the exporting hierarchical data, we are working on solution however I cannot give you a time-frame when it will be ready for release.

    Greetings,
    Martin Vasilev
    the Telerik team
    Q3’10 SP1 of RadControls for WinForms is available for download; also available is the Q1'11 Roadmap for Telerik Windows Forms controls.
  9. Nathaniel
    Nathaniel avatar
    12 posts
    Member since:
    Feb 2009

    Posted 23 Jun 2011 Link to this post

    Looks like Telerik doesn't always get a chance to come back to these older threads. The ExportHierarchy feature is included in the latest release:

    http://www.telerik.com/community/forums/winforms/gridview/excel-export-for-hierarchial-data-in-the-radgridview.aspx#1611645
  10. Rahil
    Rahil avatar
    1 posts
    Member since:
    Sep 2011

    Posted 12 Dec 2011 Link to this post

    Is the hierarchical export available in Telerik ASP.NET Ajax as well?  The link above seem to be relevant to WinForm version of RadGridView...

    Thanks,
  11. Stefan
    Admin
    Stefan avatar
    2908 posts

    Posted 15 Dec 2011 Link to this post

    Hi Rahil,

    This forum concerns RadControls for WinForms suite and not RadControls for ASP.NET AJAX. Please address your question in the appropriate forum, so you can get the answer to your question.
     
    Best wishes,
    Stefan
    the Telerik team

    Q3’11 of RadControls for WinForms is available for download (see what's new). Get it today.

Back to Top