System.InvalidOperationException: {"Could not find neighbour element!"}
and the stack trace is atTelerik.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)10 Answers, 1 is accepted
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
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
I think we might also have a potential problem with printing if the column headers do not get printed.
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
just sent a support ticket.
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
http://www.telerik.com/community/forums/winforms/gridview/excel-export-for-hierarchial-data-in-the-radgridview.aspx#1611645
Thanks,
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.
