Hi
We are using a 2 language system and set the headers of the RadGrid according to the user's selected language and works fine for display. The RadGrid should be able to export to Excel and CSV. The excel exports the headers correctly, but the CSV only uses default column names set in the ASPX file. We are using version 2015.2.729. Here is an abbreviated version of our code:
<telerik:RadGrid ID="grdBlocked" runat="server" AutoGenerateColumns="False" OnItemDataBound="grdBlocked_ItemDataBound" OnNeedDataSource="grdBlocked_NeedDataSource" OnInfrastructureExporting="grdBlocked_InfrastructureExporting" OnGridExporting="grdBlocked_GridExporting" OnItemCommand="grdBlocked_ItemCommand"> <ExportSettings ExportOnlyData="True" IgnorePaging="true"> <Excel Format="Xlsx" FileExtension=".xlsx" /> </ExportSettings> <MasterTableView DataKeyNames="StudentNumber, DateBlocked" CommandItemDisplay="Top"> <CommandItemSettings ExportToPdfText="Export to PDF" ShowAddNewRecordButton="False" ShowExportToCsvButton="True" ShowExportToExcelButton="True" ShowExportToPdfButton="False" ShowExportToWordButton="False" ShowRefreshButton="False"></CommandItemSettings> <Columns> <telerik:GridBoundColumn DataField="StudentNumber" HeaderText="Student number" UniqueName="StudentNumber"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Name" HeaderText="Student Name" UniqueName="Name"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="DateBlocked" HeaderText="Date" UniqueName="Date" DataType="System.DateTime" DataFormatString="{0:yyyy/MM/dd HH:mm}"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="BlockedUser" HeaderText="User" UniqueName="User"></telerik:GridBoundColumn> </Columns> </MasterTableView> </telerik:RadGrid>
Code behind (read comments):
using System;using System.Web.UI;using Telerik.Web.UI;namespace WritingCentreOnlineBookings.Reports{ public partial class BlockedAccounts : System.Web.UI.Page { private Includes.Site masterPage = new Includes.Site(); private WebAPICalls MyWebAPI = new WebAPICalls(); protected void BindData() { grdBlocked.DataSource = MyWebAPI.GetDataTable("GetBlockedStudents"); grdBlocked.DataBind(); } protected void grdBlocked_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e) { if (e.Item.ItemType == GridItemType.Header) { GridHeaderItem header = (GridHeaderItem)e.Item; header["StudentNumber"].Text = (masterPage.LanguageCode == "afr" ? "Studentenommer" : "Student number"); header["Name"].Text = (masterPage.LanguageCode == "afr" ? "Naam van student" : "Student name"); header["Date"].Text = (masterPage.LanguageCode == "afr" ? "Datum" : "Date"); header["User"].Text = (masterPage.LanguageCode == "afr" ? "Geblok deur" : "Blocked by"); } } protected void Page_Load(object sender, EventArgs e) { masterPage = (Includes.Site)Master; if (!Page.IsPostBack) { BindData(); } } protected void grdBlocked_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { grdBlocked.DataSource = MyWebAPI.GetDataTable("GetBlockedStudents"); } //Tried to change the column headers here, but it never gets called for CSV, only for excel protected void grdBlocked_InfrastructureExporting(object sender, GridInfrastructureExportingEventArgs e) { for (int i = 2; i <= e.ExportStructure.Tables[0].Rows.Count; i++) { var cell = e.ExportStructure.Tables[0].Cells[1, i]; //Forces the student number to be text in Excel cell.Format = "@"; cell = e.ExportStructure.Tables[0].Cells[3, i]; cell.Value = ((DateTime)cell.Value).ToString("yyyy-MM-dd HH:mm"); } } //Documentation suggests this is the place to add customization. It gets called, but does not seem to have an effect protected void grdBlocked_GridExporting(object sender, GridExportingArgs e) { GridItem[] headerItems = grdBlocked.MasterTableView.GetItems(GridItemType.Header); headerItems[0].Cells[2].Text = (masterPage.LanguageCode == "afr" ? "Studentenommer" : "Student number"); } //Also tried to rebind, just to make sure the column headers are loaded protected void grdBlocked_ItemCommand(object sender, GridCommandEventArgs e) { if (e.CommandName == RadGrid.ExportToCsvCommandName) { grdBlocked.Rebind(); } } }}