<
telerik:GridBoundColumn
DataField
=
"date"
HeaderText
=
"Date"
UniqueName
=
"date"
ReadOnly
=
"true"
AllowSorting
=
"true"
DataType
=
"System.DateTime"
DataFormatString
=
"{0:MM/dd/yyyy}"
SortExpression
=
"date"
/>
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", "MillCert.pdf"));
Response.BinaryWrite(BinaryFile);
Response.Flush();
Response.End();
function conditionalPostback(sender, args) {
args.set_enableAjax(false);
}
I have a page that has a number of complicated radgrids on it - lots of template columns, lots of eval statements, custom controls binding to properties of properties, etc. I'm already using custom paging with this, and my page size is 60 records. The underlying data source is a list of objects. It's taking something like 6 or 7 seconds just to get from the Grid DataBinding event to the Grid DataBound event. This decreases as I remove columns from my grid.
- I know that Microsoft mentions that Eval can be slow because it uses reflection (http://msdn.microsoft.com/en-us/library/4hx47hfe(v=vs.110).aspx), so I'm trying to find ways to avoid that. Would I get any improvement by making the grid itself pretty simple with the data in individual GridBoundColumn columns, and then doing more complicated formatting/binding in the ItemDataBound event.
- Some of my template columns contain custom controls that bind from an object. That object is a property of the object I'm binding to the grid. Would this cause performance issues? Should my datasource be very flat rather than having nested objects? Could I store the object in the DataKey collection? I can't imagine that populating the DataKey collection with a ton of data is a very good for performance.
- Other than values that have already been bound to the grid, the only way to access underlying data in the ItemDataBound event is by storing it in the DataKey collection, right? There's no way to access the underlying object I'm binding to, right?
For reference, here is an example of one the grids:
<
rad:RadGrid
ID
=
"gridData"
AllowFilteringByColumn
=
"false"
AllowSorting
=
"false"
runat
=
"server"
Ondate
=
"GridData_DataBinding"
OnNeedDataSource
=
"GridData_NeedDataSource"
OnItemDataBound
=
"GridData_ItemDataBound"
OnItemCommand
=
"GridData_ItemCommand"
OnUpdateCommand
=
"GridData_ItemUpdated"
>
<
GroupingSettings
CaseSensitive
=
"false"
/>
<
ExportSettings
ExportOnlyData
=
"false"
/>
<
MasterTableView
Name
=
"Exceptions"
EditMode
=
"InPlace"
EnableHeaderContextMenu
=
"true"
DataKeyNames
=
"MurexMkt, PrimaryTicker"
>
<
Columns
>
<
rad:GridTemplateColumn
HeaderText
=
""
ItemStyle-HorizontalAlign
=
"Center"
HeaderStyle-Width
=
"10"
HeaderStyle-Font-Bold
=
"true"
UniqueName
=
"Approve"
AllowFiltering
=
"false"
>
<
HeaderTemplate
>
<
input
type
=
"checkbox"
id
=
"chkAll"
onclick
=
"CheckAll(this);"
/>
</
HeaderTemplate
>
<
ItemTemplate
>
<
asp:CheckBox
ID
=
"chkApprove"
Style
=
"margin-right: -6px;"
runat
=
"server"
CssClass
=
"GridApproveCheckbox"
/>
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridBoundColumn
DataField
=
"StagePriceExceptionId"
ReadOnly
=
"true"
HeaderText
=
"ExcID"
AllowFiltering
=
"false"
HeaderStyle-Width
=
"40"
Display
=
"false"
/>
<
rad:GridBoundColumn
DataField
=
"StagePriceId"
ReadOnly
=
"true"
HeaderText
=
"ID"
AllowFiltering
=
"false"
Display
=
"false"
HeaderStyle-Width
=
"40"
/>
<
rad:GridBoundColumn
DataField
=
"SecurityId"
UniqueName
=
"SecurityId"
Display
=
"false"
HeaderText
=
"Security Id"
/>
<
rad:GridBoundColumn
DataField
=
"PriceTypeId"
UniqueName
=
"PriceTypeId"
Display
=
"false"
HeaderText
=
"Price Type Id"
/>
<
rad:GridBoundColumn
DataField
=
"AsOfDate"
ReadOnly
=
"true"
HeaderText
=
"Date"
DataFormatString
=
"{0:MM/dd/yyyy}"
ItemStyle-CssClass
=
"GridColNumber"
/>
<
rad:GridTemplateColumn
UniqueName
=
"SecurityName"
HeaderText
=
"Security"
ReadOnly
=
"true"
DataField
=
"SecurityName"
>
<
ItemTemplate
>
<
asp:HyperLink
ID
=
"hl1"
runat
=
"server"
NavigateUrl='<%# string.Format("~/SecurityXRef/SecurityXref.aspx?
menuId
=
g2
&search={0}", Eval("Ticker")) %>'>
<%# Eval("SecurityName") %>
</
asp:HyperLink
>
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridBoundColumn
DataField
=
"SecurityName"
UniqueName
=
"SecurityNameSimple"
HeaderText
=
"Security"
Display
=
"false"
/>
<
rad:GridBoundColumn
DataField
=
"SecurityIsin"
HeaderText
=
"ISIN"
Display
=
"false"
/>
<
rad:GridBoundColumn
DataField
=
"Ticker"
HeaderText
=
"Ticker"
ReadOnly
=
"true"
/>
<
rad:GridBoundColumn
DataField
=
"RIC"
HeaderText
=
"RIC"
ReadOnly
=
"true"
/>
<
rad:GridBoundColumn
DataField
=
"CurrencyCode"
HeaderText
=
"Currency"
ReadOnly
=
"true"
/>
<
rad:GridBoundColumn
UniqueName
=
"PrimarySource"
DataField
=
"DataSourceShortName"
ReadOnly
=
"true"
HeaderText
=
"Primary Source"
HeaderStyle-Wrap
=
"true"
/>
<
rad:GridBoundColumn
DataField
=
"PriceType"
HeaderText
=
"Price Type"
ReadOnly
=
"true"
/>
<
rad:GridTemplateColumn
HeaderText
=
"Price"
UniqueName
=
"PriceCol"
ItemStyle-CssClass
=
"GridColNumber"
DataField
=
"PriceLast"
SortExpression
=
"PriceLast"
>
<
ItemTemplate
>
<
rad:RadToolTip
ID
=
"radToolTipPrice"
runat
=
"server"
TargetControlID
=
"lnkOverride"
>
<
div
style
=
"text-align:left !important;"
>
<
strong
>Data Source: </
strong
> <%# Eval("DataSourceShortName")%><
br
/>
<
strong
>Price Type: </
strong
> <%# Eval("PriceType")%> <
br
/>
<
strong
>Field: </
strong
> <%# Eval("DataSourceFieldName")%> <
br
/>
<
strong
>Comment: </
strong
> <%# Eval("Comments")%>
</
div
>
</
rad:RadToolTip
>
<
asp:LinkButton
ID
=
"lnkOverride"
runat
=
"server"
CommandName
=
"Edit"
DataTextFormatString
=
"{0:0.000000}"
/>
</
ItemTemplate
>
<
EditItemTemplate
>
<
div
style
=
"text-align:left !important;"
>
<
strong
>Override: </
strong
><
br
/><
asp:TextBox
ID
=
"txtOverride"
runat
=
"server"
Text='<%# Eval("PriceLast","{0:0.000000}") %>'/><
br
/>
<
strong
>Comment: </
strong
><
br
/><
asp:TextBox
ID
=
"txtComment"
runat
=
"server"
TextMode
=
"MultiLine"
Text= '<%# Eval("Comments")%>' Rows="3" />
<
p
>
<
asp:CheckBox
ID
=
"chkAddHAndPrice"
runat
=
"server"
Text
=
"Add Fixed Price"
/>
</
p
>
<
asp:LinkButton
ID
=
"lnkSave"
runat
=
"server"
CommandName
=
"Update"
Text
=
"Update"
/>
<
asp:LinkButton
ID
=
"lnkCancel"
runat
=
"server"
CommandName
=
"Cancel"
Text
=
"Cancel"
/>
</
div
>
</
EditItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridBoundColumn
DataField
=
"JobName"
HeaderText
=
"Loader"
UniqueName
=
"Loader"
Visible
=
"false"
/>
<
rad:GridBoundColumn
DataField
=
"IsOverride"
Visible
=
"false"
/>
<
rad:GridBoundColumn
DataField
=
"PriceLast"
Display
=
"false"
/>
<
rad:GridTemplateColumn
HeaderText
=
"Bloomberg Price"
UniqueName
=
"BloombergSource"
AllowFiltering
=
"false"
ItemStyle-CssClass
=
"GridColNumber"
Display
=
"false"
HeaderStyle-Wrap
=
"true"
>
<
ItemTemplate
>
<%--<
rad:RadToolTip
ID
=
"radToolTipBbg"
runat
=
"server"
TargetControlID
=
"lblBbgSource"
>
<
div
style
=
"text-align:left !important;"
>
<
strong
>Data Source:</
strong
> <%# Eval("BbgDataSource") %>
<
br
/><
br
/>
<
strong
>Field:</
strong
> <%# Eval("BbgField") %> <
br
/>
<
strong
>Loader:</
strong
> <%# Eval("BbgJob") %><
br
/>
<
strong
>Loaded At:</
strong
> <%# Eval("BbgCreated") %>
</
div
>
</
rad:RadToolTip
>
<
asp:Label
ID
=
"lblBbgSource"
runat
=
"server"
Text='<%# Eval("BbgPrice","{0:0.000000}") %>' />--%>
<
HMC:GridPrice
Id
=
"GridPriceBbg"
runat
=
"server"
Price='<%# Eval("BbgPriceVO") %>' />
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridTemplateColumn
HeaderText
=
""
DataField
=
"AltSource1"
UniqueName
=
"AltSource1"
AllowFiltering
=
"false"
ItemStyle-CssClass
=
"GridColNumber"
Visible
=
"false"
HeaderStyle-Wrap
=
"true"
>
<
ItemTemplate
>
<
HMC:GridPrice
Id
=
"GridPrice1"
runat
=
"server"
Price='<%# Eval("AltSource1VO") %>' />
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridTemplateColumn
HeaderText
=
"Secondary Price"
DataField
=
"AltSource2"
UniqueName
=
"AltSource2"
AllowFiltering
=
"false"
ItemStyle-CssClass
=
"GridColNumber"
Visible
=
"false"
HeaderStyle-Wrap
=
"true"
>
<
ItemTemplate
>
<
HMC:GridPrice
Id
=
"GridPrice2"
runat
=
"server"
Price='<%# Eval("AltSource2VO") %>' />
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridTemplateColumn
HeaderText
=
"Tertiary Price"
UniqueName
=
"AltSource3"
AllowFiltering
=
"false"
ItemStyle-CssClass
=
"GridColNumber"
Visible
=
"false"
HeaderStyle-Wrap
=
"true"
>
<
ItemTemplate
>
<
HMC:GridPrice
Id
=
"GridPrice3"
runat
=
"server"
Price='<%# Eval("AltSource2VO") %>' />
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridTemplateColumn
HeaderText
=
"Fourth Price"
DataField
=
"AltSource4"
UniqueName
=
"AltSource4"
AllowFiltering
=
"false"
ItemStyle-CssClass
=
"GridColNumber"
Visible
=
"false"
HeaderStyle-Wrap
=
"true"
>
<
ItemTemplate
>
<
HMC:GridPrice
Id
=
"GridPrice4"
runat
=
"server"
Price='<%# Eval("AltSource2VO") %>' />
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridTemplateColumn
HeaderText
=
"Fifth Price"
DataField
=
"AltSource5"
UniqueName
=
"AltSource5"
AllowFiltering
=
"false"
ItemStyle-CssClass
=
"GridColNumber"
Visible
=
"false"
HeaderStyle-Wrap
=
"true"
>
<
ItemTemplate
>
<
HMC:GridPrice
Id
=
"GridPrice5"
runat
=
"server"
Price='<%# Eval("AltSource2VO") %>' />
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridTemplateColumn
HeaderText
=
"HMC Price"
DataField
=
"HMCPrice"
UniqueName
=
"HMCPrice"
AllowFiltering
=
"false"
ItemStyle-CssClass
=
"GridColNumber"
Display
=
"false"
HeaderStyle-Wrap
=
"true"
>
<
ItemTemplate
>
<
rad:RadToolTip
ID
=
"radToolTipHMCPrice"
runat
=
"server"
TargetControlID
=
"lblHMCPrice"
>
<
div
style
=
"text-align: left !important;"
>
<%# Eval("HMCPriceComment") %>
</
div
>
</
rad:RadToolTip
>
<
asp:Label
ID
=
"lblHMCPrice"
runat
=
"server"
Text='<%# Eval("HMCPrice.Price","{0:0.000000}") %>' />
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridTemplateColumn
UniqueName
=
"OpenWindow"
AllowFiltering
=
"false"
HeaderStyle-Width
=
"70"
ItemStyle-HorizontalAlign
=
"Center"
>
<
ItemTemplate
>
<
asp:LinkButton
ID
=
"LinkButton"
runat
=
"server"
CommandName
=
"OpenWindow"
Text
=
"View History"
></
asp:LinkButton
>
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridTemplateColumn
UniqueName
=
"OpenWindow2"
AllowFiltering
=
"false"
HeaderStyle-Width
=
"70"
ItemStyle-HorizontalAlign
=
"Center"
>
<
ItemTemplate
>
<
asp:LinkButton
ID
=
"LinkButton2"
runat
=
"server"
CommandName
=
"OpenWindow"
Text
=
"View Futures Curve"
></
asp:LinkButton
>
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridTemplateColumn
DataField
=
"ExceptionMessage"
ReadOnly
=
"true"
UniqueName
=
"ExceptionMessage"
HeaderText
=
"Error Description"
>
<
ItemTemplate
>
<
rad:RadToolTip
ID
=
"radToolTipException"
runat
=
"server"
TargetControlID
=
"lblExceptionMessage"
>
<
div
style
=
"text-align: left !important;"
>
<%# Eval("ExceptionMessage") %>
</
div
>
</
rad:RadToolTip
>
<
asp:Label
ID
=
"lblExceptionMessage"
runat
=
"server"
Text='<%# Eval("ShortErrorDescription") %>' />
</
ItemTemplate
>
</
rad:GridTemplateColumn
>
<
rad:GridBoundColumn
DataField
=
"Comments"
HeaderText
=
"Comments"
Display
=
"false"
/>
<
rad:GridBoundColumn
DataField
=
"DataStatusCode"
ReadOnly
=
"true"
HeaderText
=
"Data Status"
/>
<
rad:GridBoundColumn
DataField
=
"ExceptionStatusCode"
ReadOnly
=
"true"
HeaderText
=
"Exception Status"
Visible
=
"false"
/>
</
Columns
>
<
GroupByExpressions
>
<
rad:GridGroupByExpression
>
<
SelectFields
>
<
rad:GridGroupByField
FieldName
=
"MurexMkt"
FieldAlias
=
"MurexMkt"
HeaderText
=
"Murex Market"
/>
<
rad:GridGroupByField
Aggregate
=
"Count"
FieldName
=
"StagePriceId"
/>
</
SelectFields
>
<
GroupByFields
>
<
rad:GridGroupByField
FieldName
=
"MurexMkt"
/>
</
GroupByFields
>
</
rad:GridGroupByExpression
>
<
rad:GridGroupByExpression
>
<
SelectFields
>
<
rad:GridGroupByField
FieldName
=
"PrimaryTicker"
FieldAlias
=
"PrimaryTicker"
HeaderText
=
"Primary Ticker"
/>
<
rad:GridGroupByField
Aggregate
=
"Count"
FieldName
=
"StagePriceId"
/>
</
SelectFields
>
<
GroupByFields
>
<
rad:GridGroupByField
FieldName
=
"PrimaryTicker"
/>
</
GroupByFields
>
</
rad:GridGroupByExpression
>
<
rad:GridGroupByExpression
>
<
SelectFields
>
<
rad:GridGroupByField
FieldName
=
"ExceptionTypeCode"
/>
<
rad:GridGroupByField
Aggregate
=
"Count"
FieldName
=
"StagePriceId"
/>
</
SelectFields
>
<
GroupByFields
>
<
rad:GridGroupByField
FieldName
=
"ExceptionTypeCode"
/>
</
GroupByFields
>
</
rad:GridGroupByExpression
>
</
GroupByExpressions
>
</
MasterTableView
>
</
rad:RadGrid
>
<
telerik:RadAjaxPanel
ID
=
"RadAjaxPanel1"
runat
=
"server"
>
<
telerik:RadSearchBox
ID
=
"RadSearchBox1"
runat
=
"server"
Width
=
"250"
DataTextField
=
"Text"
DataValueField
=
"ReportID"
OnSearch
=
"RadSearchBox1_Search"
EnableAutoComplete
=
"true"
>
<
DropDownSettings
Height
=
"150"
Width
=
"250"
/>
</
telerik:RadSearchBox
>
</
telerik:RadAjaxPanel
>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
br
/>
<
telerik:RadTreeView
ID
=
"RadTreeView1"
Runat
=
"server"
>
</
telerik:RadTreeView
>
Imports
Telerik.Web.UI
Public
Class
searchTest
Inherits
System.Web.UI.Page
Dim
listreports
As
New
List(Of SiteDataItem)()
Protected
Sub
Page_Load(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
Me
.Load
If
Not
IsPostBack
Then
BindToIEnumerable(RadTreeView1)
End
If
' RadSearchBox1.DataTextField = "Text"
' RadSearchBox1.DataValueField = "ReportID"
RadSearchBox1.DataSource = listreports
End
Sub
Friend
Class
SiteDataItem
Private
text1
As
String
Private
id1
As
Integer
Private
parentId1
As
Integer
Private
reportId1
As
String
Public
Property
Text()
As
String
Get
Return
text1
End
Get
Set
(
ByVal
value
As
String
)
text1 = value
End
Set
End
Property
Public
Property
ID()
As
Integer
Get
Return
id1
End
Get
Set
(
ByVal
value
As
Integer
)
id1 = value
End
Set
End
Property
Public
Property
ParentID()
As
Integer
Get
Return
parentId1
End
Get
Set
(
ByVal
value
As
Integer
)
parentId1 = value
End
Set
End
Property
Public
Property
ReportID()
As
String
Get
Return
reportId1
End
Get
Set
(
ByVal
value
As
String
)
reportId1 = value
End
Set
End
Property
Public
Sub
New
(
ByVal
id
As
Integer
,
ByVal
parentId
As
Integer
,
ByVal
text
As
String
,
Optional
ByVal
reportId
As
String
=
"99"
)
Me
.id1 = id
Me
.parentId1 = parentId
Me
.text1 = text
Me
.reportId1 = reportId
End
Sub
End
Class
Private
Sub
BindToIEnumerable(
ByVal
treeView
As
RadTreeView)
Dim
siteData
As
New
List(Of SiteDataItem)()
siteData.Add(
New
SiteDataItem(1, 0,
"Location"
))
siteData.Add(
New
SiteDataItem(2, 0,
"func 1"
))
siteData.Add(
New
SiteDataItem(3, 0,
"func behavior"
))
siteData.Add(
New
SiteDataItem(4, 0,
"func 4"
))
siteData.Add(
New
SiteDataItem(5, 0,
"Additional reports"
))
siteData.Add(
New
SiteDataItem(6, 0,
"func 5 "
))
siteData.Add(
New
SiteDataItem(7, 0,
"func 6"
))
siteData.Add(
New
SiteDataItem(8, 0,
"example 5"
))
siteData.Add(
New
SiteDataItem(9, 0,
"Raw events"
))
siteData.Add(
New
SiteDataItem(10, 0,
"Care"
))
siteData.Add(
New
SiteDataItem(11, 0,
"Raw events"
))
siteData.Add(
New
SiteDataItem(12, 0,
"Working Reports"
, ))
siteData.Add(
New
SiteDataItem(13, 12,
"Sunday "
,
"101"
))
siteData.Add(
New
SiteDataItem(14, 12,
"Monday"
,
"102"
))
siteData.Add(
New
SiteDataItem(15, 12,
"Summery"
,
"103"
))
siteData.Add(
New
SiteDataItem(16, 12,
"Friday"
,
"104"
))
siteData.Add(
New
SiteDataItem(17, 0,
"New MultiLanguea Report"
,
"105"
))
treeView.DataTextField =
"Text"
treeView.DataFieldID =
"ID"
treeView.DataFieldParentID =
"ParentID"
treeView.DataValueField =
"ReportID"
treeView.DataSource = siteData
treeView.DataBind()
listreports = siteData
End
Sub
Protected
Sub
RadTreeView1_NodeClick(sender
As
Object
, e
As
RadTreeNodeEventArgs)
Handles
RadTreeView1.NodeClick
Session(
"Report_ID"
) = e.Node.Value
End
Sub
Protected
Sub
RadSearchBox1_Search(sender
As
Object
, e
As
SearchBoxEventArgs)
Handles
RadSearchBox1.Search
'setreport(e.Value)
End
Sub
End
Class