I have a radgrid with programtically created template columns. There are no fancy controls in the template columns. Just Links and Table.
When I download as excel it doesnt download any of the template column data. Attached below is the source code sample. I've also attached image snapshot of html rendered and excel downloaded. Creating template columns dynamically is critical for me as I'll not know the number of columns until I run some database queries to get the data.
Appreciate your help.
When I download as excel it doesnt download any of the template column data. Attached below is the source code sample. I've also attached image snapshot of html rendered and excel downloaded. Creating template columns dynamically is critical for me as I'll not know the number of columns until I run some database queries to get the data.
Appreciate your help.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ScaleAnalysisTemplateTest.aspx.cs" Inherits="DSSAnalytics.DashboardWidgets.ScaleAnalysisTool.ScaleAnalysisTemplateTest" %><%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <telerik:RadScriptManager ID="MuniWebScriptMgr" runat="server" EnablePartialRendering="true" AsyncPostBackTimeout="36000"> <Scripts> <asp:ScriptReference Path="~/scripts/jquery-1.3.2.js" /> </Scripts> </telerik:RadScriptManager> <asp:ImageButton runat="server" ID="IMG_Excel" OnClick="DownloadAsExcel" CssClass="ExcelBtnStyle" ImageUrl="../../images/excel.png" ToolTip="Export to Excel" /> <div id="gridCtrl" runat="server"> </div> </form></body></html> RadGrid r; protected void Page_Init(object sender, EventArgs e) { BuildRadGrid(); } protected void Page_Load(object sender, EventArgs e) { } private void BuildRadGrid() { r = new RadGrid(); r.ID = "ScaleAnalysisSummaryByRow"; r.GridLines = GridLines.None; r.EnableEmbeddedSkins = false; r.MasterTableView.AutoGenerateColumns = false; r.MasterTableView.TableLayout = GridTableLayout.Fixed; r.AllowSorting = true; r.MasterTableView.AllowNaturalSort = true; r.ClientSettings.Scrolling.SaveScrollPosition = false; r.EnableViewState = false; r.Height = Unit.Pixel(450); r.Width = Unit.Pixel(1200); r.MasterTableView.Width = Unit.Pixel(900); GridBoundColumn boundColumn1 = new GridBoundColumn(); boundColumn1.HeaderText = "Name"; boundColumn1.DataField = "name"; boundColumn1.UniqueName = "name"; boundColumn1.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; boundColumn1.ItemStyle.HorizontalAlign = HorizontalAlign.Left; boundColumn1.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; boundColumn1.HeaderStyle.Width = Unit.Pixel(150); boundColumn1.HeaderStyle.Font.Bold = true; r.Columns.Add(boundColumn1); GridTemplateColumn boundColumn2 = new GridTemplateColumn(); boundColumn2.HeaderText = "Series"; boundColumn2.ItemTemplate = new ScaleAnalysisRowSeriesNameTemplate(); boundColumn2.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; boundColumn2.ItemStyle.HorizontalAlign = HorizontalAlign.Left; boundColumn2.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; boundColumn2.HeaderStyle.Width = Unit.Pixel(130); boundColumn2.HeaderStyle.Font.Bold = true; r.Columns.Add(boundColumn2); GridBoundColumn boundColumn3 = new GridBoundColumn(); boundColumn3.HeaderText = "Amount"; boundColumn3.DataField = "amt"; boundColumn3.UniqueName = "amt"; boundColumn3.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; boundColumn3.ItemStyle.HorizontalAlign = HorizontalAlign.Right; boundColumn3.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; boundColumn3.HeaderStyle.Width = Unit.Pixel(60); boundColumn3.HeaderStyle.Font.Bold = true; boundColumn3.DataFormatString = "{0:N0}"; r.Columns.Add(boundColumn3); int year = 2010; string col1 = "col1_d1"; string col2 = "col1_d2"; string col3 = "col1_d3"; string col4 = "col1_d4"; GridTemplateColumn templateColumn = new GridTemplateColumn(); templateColumn.HeaderTemplate = new ScaleAnalysisRowHeaderTemplate(year); templateColumn.ItemTemplate = new ScaleAnalysisRowItemTemplate(col1 , col2, col3 , col4); r.Columns.Add(templateColumn); year = 2011; col1 = "col2_d1"; col2 = "col2_d2"; col3 = "col2_d3"; col4 = "col2_d4"; GridTemplateColumn templateColumn2 = new GridTemplateColumn(); templateColumn2.HeaderTemplate = new ScaleAnalysisRowHeaderTemplate(year); templateColumn2.ItemTemplate = new ScaleAnalysisRowItemTemplate(col1, col2, col3, col4); r.Columns.Add(templateColumn2); r.ClientSettings.Scrolling.AllowScroll = true; r.ClientSettings.Scrolling.UseStaticHeaders = true; r.ClientSettings.Selecting.AllowRowSelect = true; r.NeedDataSource += new GridNeedDataSourceEventHandler(Grid_NeedDataSource); gridCtrl.Controls.Add(r); } protected void Grid_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("name", typeof(String)); dt.Columns.Add("series", typeof(String)); dt.Columns.Add("amt", typeof(Decimal)); dt.Columns.Add("col1_d1", typeof(Decimal)); dt.Columns.Add("col1_d2", typeof(Decimal)); dt.Columns.Add("col1_d3", typeof(Decimal)); dt.Columns.Add("col1_d4", typeof(Decimal)); dt.Columns.Add("col2_d1", typeof(Decimal)); dt.Columns.Add("col2_d2", typeof(Decimal)); dt.Columns.Add("col2_d3", typeof(Decimal)); dt.Columns.Add("col2_d4", typeof(Decimal)); DataRow dr = dt.NewRow(); dr["name"] = "John Smith"; dr["series"] = "S1"; dr["amt"] = 200.98; dr["col1_d1"] = 120; dr["col1_d2"] = 11; dr["col1_d3"] = 12090; dr["col1_d4"] = 1221; dr["col2_d1"] = 320; dr["col2_d2"] = 110; dr["col2_d3"] = 1190; dr["col2_d4"] = 121; dt.Rows.Add(dr); dr = dt.NewRow(); dr["name"] = "Mary Jones"; dr["series"] = "S2"; dr["amt"] = 200.98; dr["col1_d1"] = 120; dr["col1_d2"] = 11; dr["col1_d3"] = 12090; dr["col1_d4"] = 1221; dr["col2_d1"] = 20; dr["col2_d2"] = 10; dr["col2_d3"] = 190; dr["col2_d4"] = 21; dt.Rows.Add(dr); dr = dt.NewRow(); dr["name"] = "Test User"; dr["series"] = "S3"; dr["amt"] = 200.98; dr["col1_d1"] = 120; dr["col1_d2"] = 11; dr["col1_d3"] = 12090; dr["col1_d4"] = 1221; dr["col2_d1"] = 200; dr["col2_d2"] = 109; dr["col2_d3"] = 1990; dr["col2_d4"] = 218; dt.Rows.Add(dr); RadGrid grid = (RadGrid)source; grid.DataSource = dt; } protected void DownloadAsExcel(object sender, EventArgs e) { try { r.ExportSettings.IgnorePaging = true; r.ExportSettings.OpenInNewWindow = true; r.ExportSettings.ExportOnlyData = true; r.ExportSettings.FileName = "ExcelSample"; r.MasterTableView.ExportToExcel(); } catch (Exception ex) { throw ex; } }}internal class ScaleAnalysisRowSeriesNameTemplate : ITemplate{ protected LiteralControl securityWindow; public ScaleAnalysisRowSeriesNameTemplate() { } public void InstantiateIn(System.Web.UI.Control container) { Table table = new Table(); table.CellSpacing = 0; table.CellPadding = 0; table.Width = Unit.Percentage(100); table.BorderStyle = BorderStyle.None; TableRow tr1 = new TableRow(); TableCell td1 = new TableCell(); td1.BorderStyle = BorderStyle.None; td1.BorderWidth = Unit.Pixel(0); securityWindow = new LiteralControl(); securityWindow.DataBinding += new EventHandler(lControl_Series_DataBinding); td1.Controls.Add(securityWindow); td1.HorizontalAlign = HorizontalAlign.Left; td1.VerticalAlign = VerticalAlign.Middle; td1.Controls.Add(securityWindow); tr1.Cells.Add(td1); table.Rows.Add(tr1); container.Controls.Add(table); } public void lControl_Series_DataBinding(object sender, EventArgs e) { LiteralControl l = (LiteralControl)sender; GridDataItem container = (GridDataItem)l.NamingContainer; string securityWinLink = "openwin('" + ((DataRowView)container.DataItem)["series"].ToString() + "')"; l.Text = "<a onclick=" + securityWinLink + " title='Click to Open series details'><b><u>" + ((DataRowView)container.DataItem)["series"].ToString() + "</u></b></a>"; }}internal class ScaleAnalysisRowHeaderTemplate : ITemplate{ private int _year; public ScaleAnalysisRowHeaderTemplate(int year) { _year = year; } public void InstantiateIn(System.Web.UI.Control container) { Table table = new Table(); table.CellSpacing = 0; table.CellPadding = 0; table.Width = Unit.Percentage(100); table.BorderStyle = BorderStyle.None; TableRow tr0 = new TableRow(); TableRow tr1 = new TableRow(); TableRow tr2 = new TableRow(); int colspan = 2; TableCell td0 = new TableCell(); TableCell td1 = new TableCell(); TableCell td2 = new TableCell(); TableCell td3 = new TableCell(); TableCell td4 = new TableCell(); td0.HorizontalAlign = HorizontalAlign.Center; td0.Text = _year.ToString(); td0.Font.Bold = true; tr0.Cells.Add(td0); table.Rows.Add(tr0); colspan = 2; td1.Text = "Data1"; td2.Text = "Data2"; td3.Text = "Data3"; td4.Text = "Data4"; td1.HorizontalAlign = HorizontalAlign.Center; td2.HorizontalAlign = HorizontalAlign.Center; td3.HorizontalAlign = HorizontalAlign.Center; td4.HorizontalAlign = HorizontalAlign.Center; td1.Font.Bold = true; td2.Font.Bold = true; td3.Font.Bold = true; td4.Font.Bold = true; td1.Width = Unit.Percentage(50); td2.Width = Unit.Percentage(50); tr1.Cells.Add(td1); tr1.Cells.Add(td2); tr2.Cells.Add(td3); tr2.Cells.Add(td4); table.Rows.Add(tr1); table.Rows.Add(tr2); td0.ColumnSpan = colspan; container.Controls.Add(table); }}internal class ScaleAnalysisRowItemTemplate : ITemplate{ string _col1; string _col2; string _col3; string _col4; string _view; protected LiteralControl lControl1; protected LiteralControl lControl2; protected LiteralControl lControl3; protected LiteralControl lControl4; int _colcounter; public ScaleAnalysisRowItemTemplate(string col1, string col2, string col3, string col4) { _col1 = col1; _col2 = col2; _col3 = col3; _col4 = col4; } public void InstantiateIn(System.Web.UI.Control container) { Table table = new Table(); table.CellSpacing = 0; table.CellPadding = 0; table.Width = Unit.Percentage(100); table.BorderStyle = BorderStyle.None; TableRow tr1 = new TableRow(); TableRow tr2 = new TableRow(); TableCell td1 = new TableCell(); TableCell td2 = new TableCell(); TableCell td3 = new TableCell(); TableCell td4 = new TableCell(); lControl1 = new LiteralControl(); lControl1.ID = "lControl1" + _col1 + _colcounter.ToString(); lControl1.DataBinding += new EventHandler(lControl_col1_DataBinding); lControl2 = new LiteralControl(); lControl2.ID = "lControl2" + _col2 + _colcounter.ToString(); lControl2.DataBinding += new EventHandler(lControl_col2_DataBinding); lControl3 = new LiteralControl(); lControl3.ID = "lControl3" + _col3 + _colcounter.ToString(); lControl3.DataBinding += new EventHandler(lControl_col3_DataBinding); lControl4 = new LiteralControl(); lControl4.ID = "lControl4" + _col4 + _colcounter.ToString(); ; lControl4.DataBinding += new EventHandler(lControl_col4_DataBinding); td1.Controls.Add(lControl1); td2.Controls.Add(lControl2); td3.Controls.Add(lControl3); td4.Controls.Add(lControl4); td1.HorizontalAlign = HorizontalAlign.Center; td2.HorizontalAlign = HorizontalAlign.Center; td3.HorizontalAlign = HorizontalAlign.Center; td4.HorizontalAlign = HorizontalAlign.Center; td1.BorderStyle = BorderStyle.None; td1.BorderWidth = Unit.Pixel(0); td2.BorderStyle = BorderStyle.None; td2.BorderWidth = Unit.Pixel(0); td3.BorderStyle = BorderStyle.None; td3.BorderWidth = Unit.Pixel(0); td4.BorderStyle = BorderStyle.None; td4.BorderWidth = Unit.Pixel(0); td1.Width = Unit.Percentage(50); td2.Width = Unit.Percentage(50); tr1.Cells.Add(td1); tr1.Cells.Add(td2); tr2.Cells.Add(td3); tr2.Cells.Add(td4); table.Rows.Add(tr1); table.Rows.Add(tr2); _colcounter++; container.Controls.Add(table); } public void lControl_col1_DataBinding(object sender, EventArgs e) { LiteralControl l = (LiteralControl)sender; GridDataItem container = (GridDataItem)l.NamingContainer; l.Text = String.Format("{0:N0}", ((DataRowView)container.DataItem)[_col1]); } public void lControl_col2_DataBinding(object sender, EventArgs e) { LiteralControl l = (LiteralControl)sender; GridDataItem container = (GridDataItem)l.NamingContainer; l.Text = String.Format("{0:N2}", ((DataRowView)container.DataItem)[_col2]); } public void lControl_col3_DataBinding(object sender, EventArgs e) { LiteralControl l = (LiteralControl)sender; GridDataItem container = (GridDataItem)l.NamingContainer; l.Text = String.Format("{0:N2}", ((DataRowView)container.DataItem)[_col3]); } public void lControl_col4_DataBinding(object sender, EventArgs e) { LiteralControl l = (LiteralControl)sender; GridDataItem container = (GridDataItem)l.NamingContainer; l.Text = String.Format("{0:N0}", ((DataRowView)container.DataItem)[_col4]); }}