I have a radgrid on my aspx page. I build the grid/columns dynamically in the code behind. I use the NeedDataSource to populate the data and then use the ExportToExcel command to export the grid. I cannot find how to either wrap the column headers and/or format my numeric columns with commas. Below is the code and the aspx page and code-behind. Please help on how to do both.
A button on my page calls the exportSummary() function.
<telerik:RadGrid ID="rgExportSummary" runat="server" OnExcelMLWorkBookCreated="rgExportSummary_ExcelMLWorkBookCreated" OnNeedDataSource="rgExportSummary_NeedDataSource"> <MasterTableView Visible="false" HierarchyDefaultExpanded="true" Font-Names="Arial" Font-Size="8pt" AutoGenerateColumns="false"> <HeaderStyle Font-Names = "Arial" Font-Bold = "true" Font-Size = "8pt" /> <ItemStyle Font-Names="Arial" Font-Bold="false" Font-Size="8pt" /> </MasterTableView> </telerik:RadGrid>
Public Sub exportSummary()
Dim sql As String = ""
Try
sql = "exec ibuy.dbo.WB_sp_PrintBuyByReports_ForMultipleEvents " & buyByReportID
mobjDatabase.subExecuteNonQuery(sql)
Catch ex As SqlException
Throw New Exception(ex.Message & ", SQL: " & sql & ",frmPlanner.exportSummary")
End Try
Dim nsaid As New GridBoundColumn
nsaid.HeaderStyle.Width = Unit.Pixel(50)
nsaid.ItemStyle.Width = Unit.Pixel(50)
nsaid.DataField = "VendorMasterCD"
nsaid.HeaderText = "NSA ID"
nsaid.UniqueName = "VendorMasterCD"
rgExportSummary.MasterTableView.Columns.Add(nsaid)
Dim vendor As New GridBoundColumn
vendor.HeaderStyle.Width = Unit.Pixel(50)
vendor.ItemStyle.Width = Unit.Pixel(50)
vendor.DataField = "VendorName"
vendor.HeaderText = "Vendor"
vendor.UniqueName = "VendorName"
rgExportSummary.MasterTableView.Columns.Add(vendor)
Dim product As New GridBoundColumn
product.HeaderStyle.Width = Unit.Pixel(50)
product.ItemStyle.Width = Unit.Pixel(50)
product.DataField = "VendorProduct"
product.HeaderText = "Product"
product.UniqueName = "VendorProduct"
rgExportSummary.MasterTableView.Columns.Add(product)
Dim productid As New GridBoundColumn
productid.HeaderStyle.Width = Unit.Pixel(50)
productid.ItemStyle.Width = Unit.Pixel(50)
productid.DataField = "ProductID"
productid.HeaderText = "Product ID"
productid.UniqueName = "ProductID"
rgExportSummary.MasterTableView.Columns.Add(productid)
If Not cbBreakoutByProduct.Checked Then
Dim circset As New GridBoundColumn
circset.HeaderStyle.Width = Unit.Pixel(50)
circset.ItemStyle.Width = Unit.Pixel(50)
circset.DataField = "CirculationSet"
circset.HeaderText = "Circ Set"
circset.UniqueName = "CirculationSet"
rgExportSummary.MasterTableView.Columns.Add(circset)
Dim release As New GridBoundColumn
release.HeaderStyle.Width = Unit.Pixel(50)
release.ItemStyle.Width = Unit.Pixel(50)
release.DataField = "Release"
release.HeaderText = "Release"
release.UniqueName = "Release"
rgExportSummary.MasterTableView.Columns.Add(release)
End If
If cbBreakoutByDay.Checked Then
Dim day As New GridBoundColumn
day.HeaderStyle.Width = Unit.Pixel(50)
day.ItemStyle.Width = Unit.Pixel(50)
day.DataField = "DistributionDay"
day.HeaderText = "Day"
day.UniqueName = "DistributionDay"
rgExportSummary.MasterTableView.Columns.Add(day)
End If
If cbBreakoutByDay.Checked And cbIncludeDeliveryCodes.Checked Then
Dim deliveryCodes As New GridBoundColumn
deliveryCodes.HeaderStyle.Width = Unit.Pixel(50)
deliveryCodes.ItemStyle.Width = Unit.Pixel(50)
deliveryCodes.DataField = "DeliveryCode"
deliveryCodes.HeaderText = "Delivery Code"
deliveryCodes.UniqueName = "DeliveryCode"
rgExportSummary.MasterTableView.Columns.Add(deliveryCodes)
End If
If cbBreakoutByDay.Checked And cbIncludeVersions.Checked Then
Dim versions As New GridBoundColumn
versions.HeaderStyle.Width = Unit.Pixel(50)
versions.ItemStyle.Width = Unit.Pixel(50)
versions.DataField = "VersionsDescription"
versions.HeaderText = "Version"
versions.UniqueName = "VersionsDescription"
rgExportSummary.MasterTableView.Columns.Add(versions)
End If
Dim rop As New GridBoundColumn
rop.HeaderStyle.Width = Unit.Pixel(50)
rop.ItemStyle.Width = Unit.Pixel(50)
rop.DataField = "ROPIndValue"
rop.HeaderText = "ROP"
rop.UniqueName = "ROPIndValue"
rgExportSummary.MasterTableView.Columns.Add(rop)
'loop through criteria table to get what is visible
sql = ""
Dim columnDataField As String = ""
Dim columnIndex As Integer = 1
Dim maxProductID As Integer = 0
If cbBreakoutByProduct.Checked Then
Try
sql = "Select productid,count(*) from ibuy.dbo.Tmp_BuyByGeo_SummaryEvents_" & buyByReportID & " group by productid order by 2 desc"
mobjSqlDataReader = mobjDatabase.fnRetrieveData("DATAREADER", sql)
mobjSqlDataReader.Read()
maxProductID = mobjSqlDataReader("productid")
mobjSqlDataReader.Close()
sql = "Select b.* from ibuy.dbo.Tmp_BuyByGeo_SummaryEvents_" & buyByReportID & " a, ibuy.dbo.tmp_WB_BuyByReportsList" & UcHeader.SessionId & " b where a.productid = " & maxProductID & " and a.EventsID = b.EventID and a.EventDistributionPatternID = b.EventDistributionPatternID order by b.EventID, b.EventDistributionPatternID"
mobjSqlDataReader = mobjDatabase.fnRetrieveData("DATAREADER", sql)
Do While mobjSqlDataReader.Read
Dim day As New GridBoundColumn
day.HeaderStyle.Width = Unit.Pixel(150)
day.ItemStyle.Width = Unit.Pixel(150)
columnDataField = "Day" & columnIndex
If mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim <> "" Then
day.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " " & mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim.Replace(">", "").Replace("<", "") & " Day"
Else
day.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " Day"
End If
day.DataField = columnDataField
day.UniqueName = columnDataField
Dim circSet1 As New GridBoundColumn
circSet1.HeaderStyle.Width = Unit.Pixel(150)
circSet1.ItemStyle.Width = Unit.Pixel(150)
columnDataField = "CirculationSet" & columnIndex
If mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim <> "" Then
circSet1.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " " & mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim.Replace(">", "").Replace("<", "") & " Circ Set"
Else
circSet1.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " Circ Set"
End If
circSet1.DataField = columnDataField
circSet1.UniqueName = columnDataField
Dim release1 As New GridBoundColumn
release1.HeaderStyle.Width = Unit.Pixel(150)
release1.ItemStyle.Width = Unit.Pixel(150)
columnDataField = "Release" & columnIndex
If mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim <> "" Then
release1.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " " & mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim.Replace(">", "").Replace("<", "") & " Release"
Else
release1.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " Release"
End If
release1.DataField = columnDataField
release1.UniqueName = columnDataField
Dim circulation As New GridBoundColumn
circulation.HeaderStyle.Width = Unit.Pixel(150)
circulation.ItemStyle.Width = Unit.Pixel(150)
columnDataField = "Circulation" & columnIndex
If mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim <> "" Then
circulation.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " " & mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim.Replace(">", "").Replace("<", "") & " Circulation"
Else
circulation.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " Circulation"
End If
circulation.HeaderStyle.Wrap = True
circulation.DataField = columnDataField
circulation.UniqueName = columnDataField
rgExportSummary.MasterTableView.Columns.Add(day)
rgExportSummary.MasterTableView.Columns.Add(circSet1)
rgExportSummary.MasterTableView.Columns.Add(release1)
rgExportSummary.MasterTableView.Columns.Add(circulation)
columnIndex += 1
Loop
mobjSqlDataReader.Close()
Catch ex As SqlException
Throw New Exception(ex.Message & ", SQL: " & sql & ",frmPlanner.exportZipDetail")
End Try
Else
Try
sql = "Select * from ibuy.dbo.tmp_WB_BuyByReportsList" & UcHeader.SessionId & " order by EventID, EventDistributionPatternID"
mobjSqlDataReader = mobjDatabase.fnRetrieveData("DATAREADER", sql)
Do While mobjSqlDataReader.Read
Dim criteria As New GridBoundColumn
criteria.HeaderStyle.Width = Unit.Pixel(150)
criteria.ItemStyle.Width = Unit.Pixel(150)
columnDataField = "Circulation" & columnIndex
If mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim <> "" Then
criteria.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " " & mobjSqlDataReader("EventDistributionPatternCode").ToString.Trim.Replace(">", "").Replace("<", "") & " Circulation"
Else
criteria.HeaderText = mobjSqlDataReader("EventName").ToString.Trim.Replace(">", "").Replace("<", "") & " Circulation"
End If
criteria.DataField = columnDataField
criteria.UniqueName = columnDataField
rgExportSummary.MasterTableView.Columns.Add(criteria)
columnIndex += 1
Loop
mobjSqlDataReader.Close()
Catch ex As SqlException
Throw New Exception(ex.Message & ", SQL: " & sql & ",frmPlanner.exportZipDetail")
End Try
End If
If columnIndex = 3 Then
Dim difference As New GridBoundColumn
difference.HeaderStyle.Width = Unit.Pixel(150)
difference.ItemStyle.Width = Unit.Pixel(150)
difference.HeaderText = "Difference"
difference.DataField = "Difference"
difference.UniqueName = "Difference"
rgExportSummary.MasterTableView.Columns.Add(difference)
End If
If cbShowMinimumRequirements.Checked Then
Dim sundayMinimum As New GridBoundColumn
sundayMinimum.HeaderStyle.Width = Unit.Pixel(50)
sundayMinimum.ItemStyle.Width = Unit.Pixel(50)
sundayMinimum.DataField = "SundayMinQty"
sundayMinimum.HeaderText = "Sunday Minimum Quantity"
sundayMinimum.UniqueName = "SundayMinQty"
rgExportSummary.MasterTableView.Columns.Add(sundayMinimum)
Dim dailyMinimum As New GridBoundColumn
dailyMinimum.HeaderStyle.Width = Unit.Pixel(50)
dailyMinimum.ItemStyle.Width = Unit.Pixel(50)
dailyMinimum.DataField = "DailyMinQty"
dailyMinimum.HeaderText = "Daily Minimum Quantity"
dailyMinimum.UniqueName = "DailyMinQty"
rgExportSummary.MasterTableView.Columns.Add(dailyMinimum)
Dim sundayCharge As New GridBoundColumn
sundayCharge.HeaderStyle.Width = Unit.Pixel(50)
sundayCharge.ItemStyle.Width = Unit.Pixel(50)
sundayCharge.DataField = "SundayMinCharge"
sundayCharge.HeaderText = "Sunday Minimum Charge"
sundayCharge.UniqueName = "SundayMinCharge"
rgExportSummary.MasterTableView.Columns.Add(sundayCharge)
Dim dailyCharge As New GridBoundColumn
dailyCharge.HeaderStyle.Width = Unit.Pixel(50)
dailyCharge.ItemStyle.Width = Unit.Pixel(50)
dailyCharge.DataField = "DailyMinCharge"
dailyCharge.HeaderText = "Daily Minimum Charge"
dailyCharge.UniqueName = "DailyMinCharge"
rgExportSummary.MasterTableView.Columns.Add(dailyCharge)
End If
rgExportSummary.Rebind()
rgExportSummary.ExportSettings.Excel.Format = DirectCast([Enum].Parse(GetType(GridExcelExportFormat), "ExcelML"), GridExcelExportFormat)
rgExportSummary.ExportSettings.ExportOnlyData = True
rgExportSummary.ExportSettings.OpenInNewWindow = True
rgExportSummary.MasterTableView.ExportToExcel()
End Sub
Protected Sub rgExportSummary_ExcelMLWorkBookCreated(sender As Object, e As Telerik.Web.UI.GridExcelBuilder.GridExcelMLWorkBookCreatedEventArgs) Handles rgExportSummary.ExcelMLWorkBookCreated
Dim index As Integer = 0
For Each row As RowElement In e.WorkBook.Worksheets(0).Table.Rows
If index = 0 Then
For Each cell As CellElement In row.Cells
cell.StyleValue = "Header"
Next
Else
For Each cell As CellElement In row.Cells
cell.StyleValue = "Detail"
Next
End If
index += 1
Next
Dim style As New StyleElement("Detail")
style.FontStyle.Bold = False
style.FontStyle.FontName = "Arial"
style.FontStyle.Size = 8
e.WorkBook.Styles.Add(style)
Dim header As New StyleElement("Header")
header.FontStyle.Bold = True
header.FontStyle.FontName = "Arial"
header.FontStyle.Size = 8
e.WorkBook.Styles.Add(header)
End Sub
Protected Sub rgExportSummary_NeedDataSource(sender As Object, e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles rgExportSummary.NeedDataSource
Dim sSQL As String = ""
Dim objDataTable As New DataTable
If export Then
Try
If cbBreakoutByProduct.Checked Then
sSQL = "select * from iBuy.dbo.Tmp_BuyByGeo_ForMultipleEvents_" & buyByReportID & " order by VendorMasterCD"
Else
sSQL = "select * from iBuy.dbo.Tmp_BuyByGeo_ForMultipleEvents_" & buyByReportID & " order by VendorMasterCD, CirculationSet"
End If
objDataTable = GetDataTable(sSQL)
rgExportSummary.DataSource = objDataTable
Catch ex As SqlException
Throw New Exception(ex.Message & ", SQL: " & sSQL & ",frmPlanner.subLoadStates")
End Try
End If
End Sub