New to Telerik UI for ASP.NET AJAX? Start a free 30-day trial
Remove Detail Tables from Export
When you have a hierarchical grid but you do not want the nested (detail) tables to show up in the exported file, you should prevent them from rendering altogether by setting their HierarchyLoadMode property to ServerOnDemand
. See Example 1.
If you do not do that, the detail tables will be present in the Excel export. You may get an extra row that is blank if data was not provided, or they will simply render. Their rows may be collapsed in the Excel file, depending on the value of the HierarchyDefaultExpanded
property.
Example 1: Prevent detail tables from exporting
C#
protected void Button1_Click(object sender, EventArgs e)
{
RadGrid1.ExportSettings.FileName = "noDetailTable";
RadGrid1.ExportSettings.IgnorePaging = true;
RadGrid1.ExportSettings.ExportOnlyData = true;
RadGrid1.ExportSettings.OpenInNewWindow = true;
RadGrid1.MasterTableView.UseAllDataFields = true;
RadGrid1.ExportSettings.Excel.Format = GridExcelExportFormat.Xlsx;
//have the nested tables render only when the user expands them via the UI, so they are not present in the export output
RadGrid1.MasterTableView.HierarchyLoadMode = GridChildLoadMode.ServerOnDemand;
RadGrid1.MasterTableView.DetailTables[0].HierarchyLoadMode = GridChildLoadMode.ServerOnDemand;
RadGrid1.MasterTableView.ExportToExcel();
}
protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
if (!e.IsFromDetailTable)
{
RadGrid1.DataSource = GeneratingTable();
}
}
private DataTable GeneratingTable()
{
DataTable table = new DataTable();
table.Columns.Add("Column1");
table.Columns.Add("Column2");
table.Columns.Add("Column3");
table.Columns.Add("Column4");
for (int i = 0; i < 20; i++)
{
table.Rows.Add("Col1Row" + i, "Col2Row" + i, "Col3Row" + i, "Col4Row" + i);
}
return table;
}
protected void RadGrid1_DetailTableDataBind(object sender, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
{
DataTable table = new DataTable();
table.Columns.Add("Column5");
table.Columns.Add("Column6");
table.Columns.Add("Column7");
table.Columns.Add("Column8");
for (int i = 0; i < 20; i++)
{
table.Rows.Add("Col5Row" + i, "Col6Row" + i, "Col7Row" + i, "Col8Row" + i);
}
e.DetailTableView.DataSource = table;
}
ASP.NET
<telerik:RadGrid ID="RadGrid1" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource" AutoGenerateColumns="false" OnDetailTableDataBind="RadGrid1_DetailTableDataBind"
AllowPaging="true" PageSize="5" RenderMode="Lightweight">
<MasterTableView>
<Columns>
<telerik:GridBoundColumn DataField="Column1" HeaderText="Column1"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Column2" HeaderText="Column2"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Column3" HeaderText="Column3"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Column4" HeaderText="Column4"></telerik:GridBoundColumn>
</Columns>
<DetailTables>
<telerik:GridTableView AllowPaging="true" PageSize="5">
<Columns>
<telerik:GridBoundColumn DataField="Column5" HeaderText="Column5"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Column6" HeaderText="Column6"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Column7" HeaderText="Column7"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Column8" HeaderText="Column8"></telerik:GridBoundColumn>
</Columns>
</telerik:GridTableView>
</DetailTables>
</MasterTableView>
</telerik:RadGrid>
<asp:Button Text="Export to Excel" ID="Button1" OnClick="Button1_Click" runat="server" />