Hi,
I have a radgrid which has custom filtering, sorting , paging and if I want to find the filter expression I go to
Radgrid.MasterTableView.FilterExpression.(([Column_One] = 'Cust ')) AND (([Column_Two] = '3/31/2016 12:00:00 AM') OR ([Column_Two] = '3/18/2016 12:00:00 AM') OR ([Column_Two] = '3/28/2016 12:00:00 AM'))Dim filteredRows As DataRow() = dataTable.Select(RadGrid1.MasterTableView.FilterExpression)Also, Can you also tell me how the default filtering using onNeedDataSource works. I have a huge datatable( around 50k recods). When I tried debugging with default paging goes to the onNeedDataSource event and then filters the data. I am not sure if the dataTable is being fetched every single time. As the time taken for filtering is quite high.
I followed all the optimization techniques and got the paging to run quicker. But in the example for custom paging I see that Custom paging is being turned off when filtering or grouping is applied. Like http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/functionality/paging/custom-paging . This again causes the filtering to run slower.
Is this because the default filtering causes the page the fetch the entire data and then select the required columns from there.?
This the code as of Now. I am turning off the custom paging only for grouping. And it runs faster as I take the table from the Cache and not the Database.
Private isGrouping As Boolean = False
Protected Sub RadGrid1_GroupsChanging(source As Object, e As GridGroupsChangingEventArgs)
isGrouping = True
If e.Action = GridGroupsChangingAction.Ungroup AndAlso RadGrid1.CurrentPageIndex > 0 Then
isGrouping = False
End If
End Sub
Public Function ShouldApplySortFilterOrGroup() As Boolean
Return (RadGrid1.MasterTableView.GroupByExpressions.Count > 0 OrElse isGrouping) OrElse RadGrid1.MasterTableView.SortExpressions.Count > 0
End Function
Protected Function getDataTable() As DataTable
Dim key As String = [String].Format("{0}/{1}/{2}/{3}/{4}", x, y, c, f, s)
Dim dataTable As DataTable = TryCast(HttpRuntime.Cache(key), DataTable)
If dataTable Is Nothing Then
SqlDataSource1.FilterExpression = Session("as")
SqlDataSource1.DataBind()
Dim dv As DataView = DirectCast(SqlDataSource1.[Select](DataSourceSelectArguments.Empty), DataView)
dataTable = dv.ToTable()
Session(key) = dataTable
HttpRuntime.Cache(key) = dataTable
End If
Return dataTable
End Function
Protected Sub RadGrid1_NeedDataSource(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource
Dim dataTable As DataTable = getDataTable()
If RadGrid1.MasterTableView.FilterExpression <> "" Then
Dim filteredRows As DataRow() = dataTable.Select(RadGrid1.MasterTableView.FilterExpression) `StackOverFlow error occours here
If filteredRows.Length > 0 Then
dataTable = filteredRows.CopyToDataTable()
End If
End If
Dim startRowIndex As Integer = If((ShouldApplySortFilterOrGroup()), 0, RadGrid1.CurrentPageIndex * RadGrid1.PageSize)
Dim maximumRows As Integer = If((ShouldApplySortFilterOrGroup()), dataTable.Rows.Count, RadGrid1.PageSize)
RadGrid1.AllowCustomPaging = Not ShouldApplySortFilterOrGroup()
If RadGrid1.AllowCustomPaging Then
RadGrid1.VirtualItemCount = dataTable.Rows.Count
End If
Dim rows As DataTable = dataTable.AsEnumerable().Skip(startRowIndex).Take(maximumRows).CopyToDataTable()
RadGrid1.DataSource = rows
End Sub
