To reproduce:
Declare the following classes:
public class Test
{
public string Name { get; set; }
public Child Child { get; set; }
}
public class Child
{
public string ChildName { get; set; }
public override string ToString()
{
return ChildName;
}
}
Add the following columns:
gridViewTextBoxColumn1.FieldName = "Name";
gridViewTextBoxColumn1.HeaderText = "column1";
gridViewTextBoxColumn1.Name = "column1";
gridViewTextBoxColumn2.FieldName = "Child";
gridViewTextBoxColumn2.HeaderText = "column2";
gridViewTextBoxColumn2.Name = "column2";
this.radGridView1.MasterTemplate.Columns.AddRange(new Telerik.WinControls.UI.GridViewDataColumn[] {
gridViewTextBoxColumn1,
gridViewTextBoxColumn2});
this.radGridView1.Name = "radGridView1";
this.radGridView1.Size = new System.Drawing.Size(429, 176);
this.radGridView1.TabIndex = 0;
this.radGridView1.Text = "radGridView1";
Bind RadGridView to the following data:
var data = new List<Test>();
for (int i = 0; i < 10; i++)
{
data.Add(new Test
{
Name = "Name" + i,
Child = new Child
{
ChildName = "Child " + i
}
});
}
Export to Excel:
ExportToExcelML excelExporter = new ExportToExcelML(radGridView1);
excelExporter.RunExport(System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), @"test.xls"));
You will notice that column2 will not have text
Workaround:
Subscribe to the ExcelCellFormatting event:
void excelExporter_ExcelCellFormatting(object sender, Telerik.WinControls.UI.Export.ExcelML.ExcelCellFormattingEventArgs e)
{
if (e.ExcelCellElement.Data.DataItem.GetType().IsClass)
{
e.ExcelCellElement.Data.DataItem = e.ExcelCellElement.Data.DataItem.ToString();
}
}