Hi, I am pretty new to using the Telerik controls and am trying to clean up some pre-existing code. It seems pretty straightforward as I am just exporting a grid to pdf. The issue I am having is that I can load the page, not resize any columns, click the export to pdf button and my grid formats and looks fantastic. if i resize ANY of the columns though, not all my columns show up. This even happens if i resize and make my columns smaller. Help?
<
telerik:RadGrid
ID
=
"grdEmployee"
runat
=
"server"
AllowPaging
=
"True"
AllowSorting
=
"True"
GroupingEnabled
=
"False"
AllowMultiRowSelection
=
"True"
GridLines
=
"None"
AutoGenerateColumns
=
"False"
PageSize
=
"20"
AllowCustomPaging
=
"True"
Height
=
"400px"
CellSpacing
=
"0"
OnPageIndexChanged
=
"grdEmployee_PageIndexChanged"
OnPageSizeChanged
=
"grdEmployee_PageSizeChanged"
OnItemCommand
=
"grdEmployee_ItemCommand"
OnItemCreated
=
"grdEmployee_ItemCreated"
OnPreRender
=
"grdEmployee_PreRender"
OnSortCommand
=
"grdEmployee_SortCommand"
OnExportCellFormatting
=
"grdEmployee_ExportCellFormatting"
meta:resourcekey
=
"grdEmployee"
>
<
ClientSettings
AllowColumnHide
=
"True"
AllowColumnsReorder
=
"True"
ReorderColumnsOnClient
=
"true"
>
<
Selecting
AllowRowSelect
=
"True"
/>
<
Scrolling
AllowScroll
=
"True"
EnableVirtualScrollPaging
=
"True"
UseStaticHeaders
=
"True"
/>
<
Resizing
AllowColumnResize
=
"True"
AllowResizeToFit
=
"True"
/>
</
ClientSettings
>
<
MasterTableView
AllowNaturalSort
=
"False"
DataKeyNames
=
"EmployeeId"
EnableHeaderContextMenu
=
"False"
>
<
NestedViewTemplate
>
<
asp:Panel
ID
=
"pnlEmployeeDetails"
runat
=
"server"
CssClass
=
"GridDetailPanel"
>
<
table
>
<
tr
>
<
td
class
=
"gdpLabelColumn"
>
<
asp:Label
ID
=
"lblDetailFirstNameText"
runat
=
"server"
meta:resourceKey
=
"lblDetailFirstNameText"
/>
</
td
>
<
td
class
=
"gdpValueColumn"
colspan
=
"3"
>
<
asp:Label
ID
=
"lblDetailFirstNameValue"
runat
=
"server"
/>
<
asp:Label
ID
=
"lblDetailMiddleInitialValue"
runat
=
"server"
/>
<
asp:Label
ID
=
"lblDetailLastNameValue"
runat
=
"server"
/>
</
td
>
<
td
rowspan
=
"5"
>
<!--photo place holder-->
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"gdpLabelColumn"
>
<
asp:Label
ID
=
"lblDetailBirthDateText"
runat
=
"server"
meta:resourceKey
=
"lblDetailBirthDateText"
/>
</
td
>
<
td
class
=
"gdpValueColumn"
>
<
asp:Label
ID
=
"lblDetailBirthDateValue"
runat
=
"server"
/>
</
td
>
<
td
class
=
"gdpLabelColumn"
>
<
asp:Label
ID
=
"lblDetailGenderText"
runat
=
"server"
meta:resourceKey
=
"lblDetailGenderText"
/>
</
td
>
<
td
class
=
"gdpValueColumn"
>
<
asp:Label
ID
=
"lblDetailGenderValue"
runat
=
"server"
/>
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"gdpLabelColumn"
>
<
asp:Label
ID
=
"lblDetailHireDateText"
runat
=
"server"
meta:resourceKey
=
"lblDetailHireDateText"
/>
</
td
>
<
td
class
=
"gdpValueColumn"
>
<
asp:Label
ID
=
"lblDetailHireDateDetailValue"
runat
=
"server"
/>
</
td
>
<
td
class
=
"gdpLabelColumn"
>
<
asp:Label
ID
=
"lblDetailTerminationDateText"
runat
=
"server"
meta:resourceKey
=
"lblDetailTerminationDateText"
/>
</
td
>
<
td
class
=
"gdpValueColumn"
>
<
asp:Label
ID
=
"lblDetailTerminationDateValue"
runat
=
"server"
/>
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"gdpLabelColumn"
>
<
asp:Label
ID
=
"lblDetailSiteText"
runat
=
"server"
meta:resourceKey
=
"lblDetailSiteText"
/>
</
td
>
<
td
class
=
"gdpValueColumn"
>
<
asp:Label
ID
=
"lblDetailSiteValue"
runat
=
"server"
/>
</
td
>
<
td
class
=
"gdpLabelColumn"
>
<
asp:Label
ID
=
"lblDetailDepartmentText"
runat
=
"server"
meta:resourceKey
=
"lblDetailDepartmentText"
/>
</
td
>
<
td
class
=
"gdpValueColumn"
>
<
asp:Label
ID
=
"lblDetailDepartmentValue"
runat
=
"server"
/>
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"gdpLabelColumn"
>
<
asp:Label
ID
=
"lblDetailClassificationText"
runat
=
"server"
meta:resourceKey
=
"lblDetailClassificationText"
/>
</
td
>
<
td
class
=
"gdpValueColumn"
>
<
asp:Label
ID
=
"lblDetailClassificationValue"
runat
=
"server"
/>
</
td
>
<
td
class
=
"gdpLabelColumn"
>
<
asp:Label
ID
=
"lblDetailEmployeeGroupText"
runat
=
"server"
meta:resourceKey
=
"lblDetailEmployeeGroupText"
/>
</
td
>
<
td
class
=
"gdpValueColumn"
>
<
asp:Label
ID
=
"lblDetailEmployeeGroupValue"
runat
=
"server"
/>
</
td
>
</
tr
>
</
table
>
</
asp:Panel
>
</
NestedViewTemplate
>
<
CommandItemSettings
ExportToPdfText
=
"Export to PDF"
ShowAddNewRecordButton
=
"False"
ShowRefreshButton
=
"false"
/>
<
RowIndicatorColumn
FilterControlAltText
=
"Filter RowIndicator column"
/>
<
ExpandCollapseColumn
FilterControlAltText
=
"Filter ExpandColumn column"
Visible
=
"True"
/>
<
Columns
>
<
telerik:GridClientSelectColumn
UniqueName
=
"Select"
>
<
HeaderStyle
HorizontalAlign
=
"Left"
Width
=
"20px"
/>
</
telerik:GridClientSelectColumn
>
<
telerik:GridImageColumn
UniqueName
=
"CombinedEmployeeStatus"
DataAlternateTextField
=
"CombinedEmployeeStatus"
DataImageUrlFields
=
"EnabledStatus,ActiveStatus"
DataImageUrlFormatString
=
"~/Style/Images/Grid/Employee {0} {1}.bmp"
ImageAlign
=
"Middle"
ImageHeight
=
"16px"
ImageWidth
=
"16px"
>
<
HeaderStyle
Width
=
"20px"
/>
</
telerik:GridImageColumn
>
<
telerik:GridTemplateColumn
UniqueName
=
"FirstName"
SortExpression
=
"FirstName"
meta:resourceKey
=
"grdEmployee_FirstName"
>
<
ItemTemplate
>
<
asp:HyperLink
ID
=
"hlkSelect"
runat
=
"server"
ForeColor
=
"#3B3B3B"
Text='<%# DataBinder.Eval(Container, "DataItem.FirstName") %>'
meta:resourceKey="hlkSelect" />
</
ItemTemplate
>
<
HeaderStyle
Width
=
"15%"
/>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"MiddleInitial"
DataField
=
"MiddleInitial"
SortExpression
=
"MiddleInitial"
meta:resourceKey
=
"grdEmployee_MiddleInitial"
>
<
HeaderStyle
Width
=
"35px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"LastName"
DataField
=
"LastName"
SortExpression
=
"LastName"
meta:resourceKey
=
"grdEmployee_LastName"
>
<
HeaderStyle
Width
=
"25%"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"EmployeeNumber"
DataField
=
"EmployeeNumber"
SortExpression
=
"EmployeeNumber"
meta:resourceKey
=
"grdEmployee_EmployeeNumber"
>
<
HeaderStyle
Width
=
"15%"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"SSN"
DataField
=
"SSN"
SortExpression
=
"SSN"
meta:resourceKey
=
"grdEmployee_SSN"
/>
<
telerik:GridBoundColumn
UniqueName
=
"BirthDate"
Display
=
"False"
DataField
=
"BirthDate"
SortExpression
=
"BirthDate"
meta:resourceKey
=
"grdEmployee_BirthDate"
/>
</
Columns
>
<
SortExpressions
>
<
telerik:GridSortExpression
FieldName
=
"LastName"
/>
</
SortExpressions
>
</
MasterTableView
>
<
PagerStyle
Mode
=
"Slider"
/>
<
FilterMenu
EnableImageSprites
=
"False"
/>
<
HeaderContextMenu
CssClass
=
"GridContextMenu GridContextMenu_Default"
/>
</
telerik:RadGrid
>
#region Grid Events
/// <
summary
>
/// Handles the ItemCreated event of the grdEmployee control.
/// </
summary
>
/// <
param
name
=
"sender"
>The source of the event.</
param
>
/// <
param
name
=
"e"
>The <
see
cref
=
"Telerik.Web.UI.GridItemEventArgs"
/> instance containing the event data.</
param
>
protected void grdEmployee_ItemCreated(object sender, GridItemEventArgs e)
{
//set the grid column properties
if ((e.Item is GridDataItem) && (_gridDataExport == false))
{
GridDataItem dataItem = e.Item as GridDataItem;
string employeeId = dataItem.GetDataKeyValue(_GRID_DATAKEY).ToString();
//Check the selected item, if any on the current page
MarkSelectedItems(dataItem, employeeId);
//Add the link to navigate to employee record
HyperLink selectLink = (HyperLink)dataItem.FindControl("hlkSelect");
selectLink.NavigateUrl = AptaFundUrl.ToEmployeeEdit() + "&EmployeeId=" + employeeId;
}
else if ((e.Item is GridDataItem) && (_gridDataExport == true) && (_gridDataPdfExport == true))//pdf export
{
//pdf export column formatting
e.Item.Style["text-align"] = "left";
}
}
/// <
summary
>
/// Handles the SortCommand event of the grdEmployee control.
/// </
summary
>
/// <
param
name
=
"sender"
>The source of the event.</
param
>
/// <
param
name
=
"e"
>The <
see
cref
=
"Telerik.Web.UI.GridSortCommandEventArgs"
/> instance containing the event data.</
param
>
protected void grdEmployee_SortCommand(object sender, GridSortCommandEventArgs e)
{
try
{
//cancel the current sort
e.Canceled = true;
GridSortExpression sortExpression = new GridSortExpression();
//get the new sort field name
sortExpression.FieldName = e.SortExpression;
//set the new sort order ascending/descending
sortExpression.SortOrder = e.NewSortOrder;
//store the sort expression, which can be used when they come back from another screen
StoreSortExpressionToSession(sortExpression);
//make sure only selected items are stored.(the user might have changed the selections
this.StoreGridSelectedItems(this.grdEmployee);
//bind the gird with new sort
this.DoSearch(false, sortExpression);
}
catch (Exception ex)
{
base.CatchPageErrorAndLog(ex);
}
}
/// <
summary
>
/// Handles the ItemCommand event of the grdEmployee control. Fired when the grid is expanded
/// </
summary
>
/// <
param
name
=
"sender"
>The source of the event.</
param
>
/// <
param
name
=
"e"
>The <
see
cref
=
"Telerik.Web.UI.GridCommandEventArgs"
/> instance containing the event data.</
param
>
protected void grdEmployee_ItemCommand(object sender, GridCommandEventArgs e)
{
try
{
if (e.CommandName == RadGrid.ExpandCollapseCommandName && !e.Item.Expanded)
{
//show the details of the employee
PopulateEmployeeDetailTemplate(e.Item as GridDataItem, e);
}
}
catch (Exception ex)
{
base.CatchPageErrorAndLog(ex);
}
}
/// <
summary
>
/// Handles the ExportCellFormatting event of the grdEmployee control.
/// </
summary
>
/// <
param
name
=
"sender"
>The source of the event.</
param
>
/// <
param
name
=
"e"
>The <
see
cref
=
"Telerik.Web.UI.ExportCellFormattingEventArgs"
/> instance containing the event data.</
param
>
protected void grdEmployee_ExportCellFormatting(object sender, ExportCellFormattingEventArgs e)
{
if (_gridDataExcelExport == true) //do this only for excel export
{
//header item formatting
GridHeaderItem HeaderItem = (GridHeaderItem)grdEmployee.MasterTableView.GetItems(GridItemType.Header)[0];
foreach (TableCell cell in HeaderItem.Cells)
{
cell.Style["text-align"] = "left";
}
// each column data formatting
e.Cell.Style["text-align"] = "left";
}
}
/// <
summary
>
/// Handles the PreRender event of the grdEmployee control.
/// </
summary
>
/// <
param
name
=
"sender"
>The source of the event.</
param
>
/// <
param
name
=
"e"
>The <
see
cref
=
"System.EventArgs"
/> instance containing the event data.</
param
>
protected void grdEmployee_PreRender(object sender, EventArgs e)
{
//We are using our own select all record option
//We want to allow the user to uncheck rows after they do a select all first
//See below why we want do that
//The Telerik grid top header checkbox by default, only selects records listed on the page
//Also, the Telerik grid will check the top checkbox, if all the rows displayed in the page is checked(we may not want this, as user might have deselected some rows)
if (_gridDataExport == false) //do this only when not exporting data
{
foreach (GridHeaderItem headerItem in grdEmployee.MasterTableView.GetItems(GridItemType.Header))
{
//Find the SelectAll CheckBox in the header using the ClientSelectColumn's "UniqueName"
if (headerItem["Select"].Controls[0] != null)
{
CheckBox chkSelectAll = headerItem["Select"].Controls[0] as CheckBox;
if (chkSelectAll != null)
{
//hide it
chkSelectAll.Visible = false;
}
}
}
}
else if ((_gridDataExport == true) && (_gridDataPdfExport == true)) //pdf export
{
//format header columns for pdf export
foreach (GridHeaderItem headerItem in grdEmployee.MasterTableView.GetItems(GridItemType.Header))
{
headerItem["FirstName"].Style["text-align"] = "left";
headerItem["LastName"].Style["text-align"] = "left";
headerItem["MiddleInitial"].Style["text-align"] = "left";
headerItem["EmployeeNumber"].Style["text-align"] = "left";
headerItem["SSN"].Style["text-align"] = "left";
}
GridColumn column = grdEmployee.MasterTableView.GetColumn("FirstName");
column.HeaderStyle.Width = Unit.Pixel(50);
GridColumn column2 = grdEmployee.MasterTableView.GetColumn("MiddleInitial");
column2.HeaderStyle.Width = Unit.Pixel(50);
}
}
/// <
summary
>
/// Handles the PageSizeChanged event of the grdEmployee control.
/// </
summary
>
/// <
param
name
=
"sender"
>The source of the event.</
param
>
/// <
param
name
=
"e"
>The <
see
cref
=
"Telerik.Web.UI.GridPageSizeChangedEventArgs"
/> instance containing the event data.</
param
>
protected void grdEmployee_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
{
try
{
if (_gridDataExport == false)
{
StoreGridSelectedItems(this.grdEmployee);
DoSearch(false);
}
}
catch (Exception ex) //capture any error here to show it as we use AJAX
{
base.CatchPageErrorAndLog(ex);
}
}
/// <
summary
>
/// Handles the PageIndexChanged event of the grdEmployee control.
/// </
summary
>
/// <
param
name
=
"sender"
>The source of the event.</
param
>
/// <
param
name
=
"e"
>The <
see
cref
=
"Telerik.Web.UI.GridPageChangedEventArgs"
/> instance containing the event data.</
param
>
protected void grdEmployee_PageIndexChanged(object sender, GridPageChangedEventArgs e)
{
try
{
StoreGridSelectedItems(this.grdEmployee);
DoSearch(false);
}
catch (Exception ex) //capture any error here to show it as we use AJAX
{
base.CatchPageErrorAndLog(ex);
}
}
/// <
summary
>
/// Handles the Click event of the btnGridExportToExcel control.
/// </
summary
>
/// <
param
name
=
"sender"
>The source of the event.</
param
>
/// <
param
name
=
"e"
>The <
see
cref
=
"System.EventArgs"
/> instance containing the event data.</
param
>
protected void btnGridExportToExcel_Click(object sender, EventArgs e)
{
_gridDataExport = true; //set this so that other grid events can check for this and not execute it as we do not need that when exporting
_gridDataExcelExport = true;
//Following is necessary for getting all rows from database.
DoSearch(false);
grdEmployee.MasterTableView.RowIndicatorColumn.Visible = false;
//hide the select checkbox column
grdEmployee.MasterTableView.Columns.FindByUniqueName("Select").Visible = false;
grdEmployee.MasterTableView.Columns.FindByUniqueName("CombinedEmployeeStatus").Visible = false;
grdEmployee.ExportSettings.HideStructureColumns = true;
grdEmployee.ExportSettings.OpenInNewWindow = true;
grdEmployee.ExportSettings.ExportOnlyData = true;
grdEmployee.ExportSettings.IgnorePaging = true;
grdEmployee.MasterTableView.ExportToExcel();
}
/// <
summary
>
/// Handles the Click event of the btnGridExportToPDF control.
/// </
summary
>
/// <
param
name
=
"sender"
>The source of the event.</
param
>
/// <
param
name
=
"e"
>The <
see
cref
=
"System.EventArgs"
/> instance containing the event data.</
param
>
protected void btnGridExportToPDF_Click(object sender, EventArgs e)
{
_gridDataExport = true; //set this so that other gird events can check for this and not execute it as we do not need that when exporting
_gridDataPdfExport = true;
DoSearch(false);
//hide the select checkbox column
grdEmployee.MasterTableView.Columns.FindByUniqueName("Select").Visible = false;
grdEmployee.MasterTableView.Columns.FindByUniqueName("CombinedEmployeeStatus").Visible = false;
//format columns for fitting within page in portrait mode
grdEmployee.MasterTableView.Columns.FindByUniqueName("SSN").HeaderStyle.Width = Unit.Pixel(100);
grdEmployee.MasterTableView.Columns.FindByUniqueName("SSN").ItemStyle.Width = Unit.Pixel(100);
grdEmployee.MasterTableView.Columns.FindByUniqueName("EmployeeNumber").HeaderStyle.Width = Unit.Pixel(100);
grdEmployee.MasterTableView.Columns.FindByUniqueName("EmployeeNumber").ItemStyle.Width = Unit.Pixel(100);
grdEmployee.MasterTableView.Columns.FindByUniqueName("FirstName").ItemStyle.Width = Unit.Pixel(100);
grdEmployee.MasterTableView.Columns.FindByUniqueName("FirstName").HeaderStyle.Width = Unit.Pixel(100);
grdEmployee.MasterTableView.Columns.FindByUniqueName("LastName").HeaderStyle.Width = Unit.Pixel(100);
grdEmployee.MasterTableView.Columns.FindByUniqueName("LastName").ItemStyle.Width = Unit.Pixel(100);
grdEmployee.MasterTableView.Columns.FindByUniqueName("MiddleInitial").ItemStyle.Width = Unit.Pixel(100);
grdEmployee.MasterTableView.Columns.FindByUniqueName("MiddleInitial").HeaderStyle.Width = Unit.Pixel(100);
grdEmployee.ExportSettings.OpenInNewWindow = true;
grdEmployee.ExportSettings.ExportOnlyData = true;
grdEmployee.ExportSettings.IgnorePaging = true;
grdEmployee.ExportSettings.Pdf.PageLeftMargin = Unit.Pixel(0);
grdEmployee.ExportSettings.Pdf.PageRightMargin = Unit.Pixel(0);
grdEmployee.MasterTableView.ExportToPdf();
}
#endregion