I have a RadGrid in my form that has a MasterViewTable and 1 GridTableView. In my MasterViewTable I will have a total of 1643 records. Out of those parent records, only 160 have child records. Some have 1, Some have a few. There are pages where all the parent records on that page do not have any Children. You will see below my RadGrid declaration all of the functions I am using. The performance is very slow. About 15 to 20 seconds between pagination or sorting. Is there something I am doing wrong or is there something I need to do differently? I have looked at all of the "tuning articles" and believe I am doing everything correctly. I cannot release this grid with that type of delay. One more thing, I am only showing 50 parent rows on every page. Thank you in advance. I call the autoRadGrid.DataBind() function when the user clicks on a drop-down on the screen.
NeedDataSource
ItemDataBound
ItemCreated
PreRenderer
DetailTableDataBind
HideExpandColumnRecursive
GetDataTable
<telerik:RadGrid ID="autoRadGrid" runat="server" Width="1500" Height="700" AllowPaging="true" PagerStyle-Mode="NextPrevAndNumeric" AutoGenerateColumns="false" ShowStatusBar="true" AllowSorting="true" AllowFilteringByColumn="true" Skin="WebBlue"> <MasterTableView PageSize="50" AllowMultiColumnSorting="true" DataKeyNames="DetailID, Day" HierarchyLoadMode="ServerOnDemand" HierarchyDefaultExpanded="true" > <DetailTables> <telerik:GridTableView Name="SubCodes" Width="100%"> <ParentTableRelation> <telerik:GridRelationFields DetailKeyField="DetailID" MasterKeyField="DetailID" /> <telerik:GridRelationFields DetailKeyField="Day" MasterKeyField="Day" /> </ParentTableRelation> <Columns> <telerik:GridBoundColumn DataField="Sub_Code" HeaderText="Sub Code" UniqueName="Sub_Code" FilterControlWidth="60" HeaderStyle-Width="80"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="HouseHold_Count" HeaderText="Household" UniqueName="HouseHold_Count" FilterControlWidth="60" HeaderStyle-Width="80"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CD1" UniqueName="CD1" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CD2" UniqueName="CD2" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CD3" UniqueName="CD3" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic1" UniqueName="Demographic1" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic2" UniqueName="Demographic2" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic3" UniqueName="Demographic3" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic4" UniqueName="Demographic4" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic5" UniqueName="Demographic5" FilterControlWidth="60" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridTemplateColumn UniqueName="Selected" HeaderText="Selected" SortExpression="Selected" FilterControlWidth="60" HeaderStyle-Width="60"> <ItemTemplate> <asp:CheckBox ID="selected" Checked='<%# Bind("Selected") %>' AutoPostBack="false" runat="server" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn UniqueName="Forced" HeaderText="Forced" SortExpression="Forced" FilterControlWidth="60" HeaderStyle-Width="60"> <ItemTemplate> <asp:CheckBox ID="forced" Checked='<%# Bind("Forced") %>' AutoPostBack="false" runat="server" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn UniqueName="Circ" HeaderText="Circ" SortExpression="Circ" FilterControlWidth="60" HeaderStyle-Width="70"> <ItemTemplate> <asp:TextBox ID="circ" Text='<%# Bind("Circ") %>' AutoPostBack="false" runat="server" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="Coverage" HeaderText="Coverage" UniqueName="Coverage" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> </Columns> </telerik:GridTableView> </DetailTables> <Columns> <telerik:GridBoundColumn DataField="Geography" HeaderText="Geography" UniqueName="Geography" FilterControlWidth="60" HeaderStyle-Width="80"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CirculationTypeDescription" HeaderText="Circ Type" UniqueName="CirculationTypeDescription" FilterControlWidth="60" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="HouseHold_Count" HeaderText="Household" UniqueName="HouseHold_Count" FilterControlWidth="60" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="TotalCoverage" HeaderText="Total Coverage" UniqueName="TotalCoverage" FilterControlWidth="60" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="LocationMarket" HeaderText="LocationMarket" UniqueName="LocationMarket" FilterControlWidth="60" HeaderStyle-Width="95"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="LocationNumber" HeaderText="Location Number" UniqueName="LocationNumber" FilterControlWidth="60" HeaderStyle-Width="75"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="LocationName" HeaderText="Location Name" UniqueName="LocationName" FilterControlWidth="60" HeaderStyle-Width="110"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Distance" HeaderText="Distance" UniqueName="Distance" FilterControlWidth="60" HeaderStyle-Width="75"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Sales" HeaderText="Sales" UniqueName="Sales" FilterControlWidth="60" HeaderStyle-Width="50"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="TotalSales" HeaderText="Total Sales" UniqueName="TotalSales" FilterControlWidth="60" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="BOS" HeaderText="BOS" UniqueName="BOS" FilterControlWidth="60" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CumeBOS" HeaderText="Cume BOS" UniqueName="CumeBOS" FilterControlWidth="60" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="SPH" HeaderText="SPH" UniqueName="SPH" FilterControlWidth="60" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="SPHIndex" HeaderText="SPH Index" UniqueName="SPHIndex" FilterControlWidth="60" HeaderStyle-Width="80"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CD1" UniqueName="CD1" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CD2" UniqueName="CD2" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CD3" UniqueName="CD3" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic1" UniqueName="Demographic1" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic2" UniqueName="Demographic2" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic3" UniqueName="Demographic3" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic4" UniqueName="Demographic4" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Demographic5" UniqueName="Demographic5" FilterControlWidth="60" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Day" HeaderText="Day" UniqueName="Day" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridTemplateColumn UniqueName="Selected" HeaderText="Selected" SortExpression="Selected" FilterControlWidth="60" HeaderStyle-Width="60"> <ItemTemplate> <asp:CheckBox ID="selected" Checked='<%# Bind("Selected") %>' AutoPostBack="false" runat="server" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn UniqueName="Forced" HeaderText="Forced" SortExpression="Forced" FilterControlWidth="60" HeaderStyle-Width="60"> <ItemTemplate> <asp:CheckBox ID="forced" Checked='<%# Bind("Forced") %>' AutoPostBack="false" runat="server" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn UniqueName="Circ" HeaderText="Circ" SortExpression="Circ" FilterControlWidth="60" HeaderStyle-Width="70"> <ItemTemplate> <asp:TextBox ID="circ" Text='<%# Bind("Circ") %>' AutoPostBack="false" runat="server" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="Coverage" HeaderText="Coverage" UniqueName="Coverage" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Zones" HeaderText="Zones" UniqueName="Zones" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Version" HeaderText="Version" UniqueName="Version" FilterControlWidth="60" HeaderStyle-Width="90"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="SubVersionCategory" HeaderText="Sub-Version Category" UniqueName="SubVersionCategory" FilterControlWidth="90" HeaderStyle-Width="70"></telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="DeliveryCode" HeaderText="Delivery Code" UniqueName="DeliveryCode" FilterControlWidth="90" HeaderStyle-Width="70"></telerik:GridBoundColumn> </Columns> </MasterTableView> <ClientSettings AllowColumnsReorder="true" ColumnsReorderMethod="Swap" > <ClientEvents OnGridCreated="GetGridObject" /> <Scrolling AllowScroll="true" FrozenColumnsCount="2" UseStaticHeaders="true" SaveScrollPosition="true" /> <Selecting AllowRowSelect="true" /> <Resizing AllowColumnResize="true" /> </ClientSettings> </telerik:RadGrid>NeedDataSource
Private Sub autoRadGrid_NeedDataSource(sender As Object, e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles autoRadGrid.NeedDataSource If mintCircSetID > 0 Then Dim intIndex As Integer = 0 Dim strSortedColumn As String = "" Dim strSortClause As String = "" mstrSQL = "" mstrSQL = "EXEC WB_sp_RetrieveGeographySelection_ForTelerik '" & mstrSessionID & "'," & mintEventID If mblnFullRunUtilizedInd Or cbSingleZip.Checked Then mstrSQL = mstrSQL & ",0" Else mstrSQL = mstrSQL & ",1" End If If cbSundayFR.Checked Or cbSundayHD.Checked Or cbSundaySC.Checked Or cbSundayMX.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If If cbMondayFR.Checked Or cbMondayHD.Checked Or cbMondaySC.Checked Or cbMondayMX.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If If cbTuesdayFR.Checked Or cbTuesdayHD.Checked Or cbTuesdaySC.Checked Or cbTuesdayMX.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If If cbWednesdayFR.Checked Or cbWednesdayHD.Checked Or cbWednesdaySC.Checked Or cbWednesdayMX.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If If cbThursdayFR.Checked Or cbThursdayHD.Checked Or cbThursdaySC.Checked Or cbThursdayMX.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If If cbFridayFR.Checked Or cbFridayHD.Checked Or cbFridaySC.Checked Or cbFridayMX.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If If cbSaturdayFR.Checked Or cbSaturdayHD.Checked Or cbSaturdaySC.Checked Or cbSaturdayMX.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If mstrSQL = mstrSQL & "," & mintParentMap If cbSundayFR.Checked Or cbMondayFR.Checked Or cbTuesdayFR.Checked Or cbWednesdayFR.Checked Or cbThursdayFR.Checked Or cbFridayFR.Checked Or cbSaturdayFR.Checked Then mstrSQL = mstrSQL & ",1,1,1" Else If cbSundayHD.Checked Or cbMondayHD.Checked Or cbTuesdayHD.Checked Or cbWednesdayHD.Checked Or cbThursdayHD.Checked Or cbFridayHD.Checked Or cbSaturdayHD.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If If cbSundayMX.Checked Or cbMondayMX.Checked Or cbTuesdayMX.Checked Or cbWednesdayMX.Checked Or cbThursdayMX.Checked Or cbFridayMX.Checked Or cbSaturdayMX.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If If cbSundaySC.Checked Or cbMondaySC.Checked Or cbTuesdaySC.Checked Or cbWednesdaySC.Checked Or cbThursdaySC.Checked Or cbFridaySC.Checked Or cbSaturdaySC.Checked Then mstrSQL = mstrSQL & ",1" Else mstrSQL = mstrSQL & ",0" End If End If intIndex = UBound(Split(hidSortInformation.Value, ",")) Do While intIndex >= 0 strSortedColumn = Trim(Split(hidSortInformation.Value, ",")(intIndex)) strSortClause = strSortClause & strSortedColumn & "," intIndex -= 1 Loop strSortClause = Left(strSortClause, Len(strSortClause) - 1) mstrSQL = mstrSQL & ",'" & strSortClause & "'," If cbSortingByParent.Checked Then mstrSQL = mstrSQL & "1" Else mstrSQL = mstrSQL & "0" End If mstrSQL = mstrSQL & ",''" If Not e.IsFromDetailTable Then autoRadGrid.DataSource = GetDataTable(mstrSQL & ",0,0,''") End If End If End Sub ItemDataBound
Private Sub autoRadGrid_ItemDataBound(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles autoRadGrid.ItemDataBound If (TypeOf (e.Item) Is GridDataItem) And e.Item.OwnerTableView.Name <> "SubCodes" Then Dim dataBoundItem As GridDataItem = e.Item Dim dataRow As DataRowView = dataBoundItem.DataItem Dim index As Integer = dataBoundItem.ItemIndex dataBoundItem("Geography").Text = dataBoundItem("Geography").Text.Trim dataBoundItem("Zones").Text = dataBoundItem("Zones").Text.Trim If dataBoundItem("TotalCoverage").Text > 0 And UCase(Request("TargetGeo")) <> "TRUE" Then dataBoundItem("TotalCoverage").Attributes.Add("onClick", "Javascript:fnOpenGeoInfoView('" & dataBoundItem("Geography").Text.ToString.Trim & "'," & mintEventID & "," & ddlCircSet.SelectedItem.Value & ")") dataBoundItem("TotalCoverage").CssClass = "GridLink" End If Dim strSubCode As String = "" Dim mode As Integer = 0 Dim day As Integer = 0 Dim circType As Integer = 0 If dataBoundItem("Zones").Text.Trim = "" Or dataBoundItem("Zones").Text.Trim = " " Then mode = 0 ElseIf InStr(dataBoundItem("Zones").Text.Trim, "NPP") > 0 Or InStr(dataBoundItem("Zones").Text.Trim, "NOPP") > 0 Then mode = 1 Else mode = 2 End If If dataBoundItem("Day").Text.Trim.ToUpper = "SUNDAY" Then day = 1 ElseIf dataBoundItem("Day").Text.Trim.ToUpper = "MONDAY" Then day = 2 ElseIf dataBoundItem("Day").Text.Trim.ToUpper = "TUESDAY" Then day = 3 ElseIf dataBoundItem("Day").Text.Trim.ToUpper = "WEDNESDAY" Then day = 4 ElseIf dataBoundItem("Day").Text.Trim.ToUpper = "THURSDAY" Then day = 5 ElseIf dataBoundItem("Day").Text.Trim.ToUpper = "FRIDAY" Then day = 6 ElseIf dataBoundItem("Day").Text.Trim.ToUpper = "SATURDAY" Then day = 7 End If If dataBoundItem("CirculationTypeDescription").Text.Trim.ToUpper = "HOME DELIVERED" Then circType = 1 ElseIf dataBoundItem("CirculationTypeDescription").Text.Trim.ToUpper = "SINGLE COPY" Then circType = 3 ElseIf dataBoundItem("CirculationTypeDescription").Text.Trim.ToUpper = "MIXED" Then circType = 2 End If dataBoundItem("Selected").Attributes.Add("onClick", "javascript:return fnSelectDayForTelerik(" & index & "," & mode & "," & mintEventID & "," & circType & "," & day & "," & ddlCircSet.SelectedItem.Value & ",'" & mstrSessionID & "'," & Request("PARID") & ",'" & Trim(UCase(Request("TargetGeo"))) & "',0);") dataBoundItem("Forced").Attributes.Add("onClick", "javascript:return fnSelectDayForTelerik(" & index & "," & mode & "," & mintEventID & "," & circType & "," & day & "," & ddlCircSet.SelectedItem.Value & ",'" & mstrSessionID & "'," & Request("PARID") & ",'" & Trim(UCase(Request("TargetGeo"))) & "',1);") Dim textBox1 As TextBox textBox1 = dataBoundItem("Circ").FindControl("Circ") textBox1.Attributes.Add("onChange", "javascript:ValidateCirculationForTelerik(" & index & "," & mintEventID & "," & circType & "," & day & "," & ddlCircSet.SelectedItem.Value & ",'" & mstrSessionID & "'," & Request("PARID") & ",''," & textBox1.Text & ",this);") Dim strZones As String = "No" If mblnFullRunUtilizedInd Or cbSingleZip.Checked Then strZones = "No" Else If dataBoundItem("Zones").Text.Trim = "" Or dataBoundItem("Zones").Text.Trim = " " Then strZones = "No" ElseIf InStr(dataBoundItem("Zones").Text.Trim, "NPP") > 0 Or InStr(dataBoundItem("Zones").Text.Trim, "NOPP") > 0 Then strZones = "No" Else strZones = "Yes" End If End If If UcHeader.objSession.ApplicationId <> CInt(ConfigurationManager.AppSettings("MediaviewerAppID")) Then If miVersionsCategoryID > 0 Then dataBoundItem("Version").Attributes.Add("onClick", "javascript:fnVersionOverrideForTelerik(" & index & ",'" & strZones & "'," & mintEventID & "," & circType & "," & day & ");") dataBoundItem("Version").CssClass = "GridLink" End If End If If UcHeader.objSession.ApplicationId <> CInt(ConfigurationManager.AppSettings("MediaviewerAppID")) Then If miDeliveryCodeCount > 0 And ddlDeliveryCodeCategory.SelectedIndex > 0 Then dataBoundItem("DeliveryCode").Attributes.Add("onClick", "javascript:fnDeliveryCodeOverrideForTelerik(" & index & ",'" & strZones & "'," & mintEventID & "," & circType & "," & day & "," & ddlDeliveryCodeCategory.SelectedValue & ");") dataBoundItem("DeliveryCode").CssClass = "GridLink" Else dataBoundItem("DeliveryCode").Text = "" End If End If End If End Sub ItemCreated
Private Sub autoRadGrid_ItemCreated(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles autoRadGrid.ItemCreated If (TypeOf (e.Item) Is GridNoRecordsItem) Then e.Item.OwnerTableView.Visible = False End If End Sub PreRenderer
Private Sub autoRadGrid_PreRender(sender As Object, e As System.EventArgs) Handles autoRadGrid.PreRender HideExpandColumnRecursive(autoRadGrid.MasterTableView) End Sub DetailTableDataBind
Private Sub autoRadGrid_DetailTableDataBind(sender As Object, e As Telerik.Web.UI.GridDetailTableDataBindEventArgs) Handles autoRadGrid.DetailTableDataBind Dim dataItem As GridDataItem = CType(e.DetailTableView.ParentItem, GridDataItem) Select Case e.DetailTableView.Name Case "SubCodes" Dim detailID As Integer = dataItem.GetDataKeyValue("DetailID").ToString() Dim Day As String = dataItem.GetDataKeyValue("Day").ToString() If mintCircSetID > 0 Then e.DetailTableView.DataSource = GetDataTable(mstrSQL & ",1," & detailID & ",'" & Day & "'") End If End Select End
HideExpandColumnRecursive
Public Sub HideExpandColumnRecursive(ByVal tableView As GridTableView) Dim nestedViewItems As GridItem() = tableView.GetItems(GridItemType.NestedView) For Each nestedViewItem As GridNestedViewItem In nestedViewItems For Each nestedView As GridTableView In nestedViewItem.NestedTableViews If nestedView.Items.Count = 0 Then Dim cell As TableCell = nestedView.ParentItem("ExpandColumn") cell.Controls(0).Visible = False nestedViewItem.Visible = False End If If nestedView.HasDetailTables Then HideExpandColumnRecursive(nestedView) End If Next Next End Sub GetDataTable
Public Function GetDataTable(ByVal query As String) As DataTable Dim ConnString As String = ConfigurationManager.ConnectionStrings("iAnalyzeConnectionString").ConnectionString Dim conn As SqlConnection = New SqlConnection(ConnString) Dim adapter As SqlDataAdapter = New SqlDataAdapter adapter.SelectCommand = New SqlCommand(query, conn) Dim table1 As New DataTable conn.Open() Try adapter.Fill(table1) Finally conn.Close() End Try Return table1 End Function