Filter rows programmatically

19 posts, 1 answers
  1. Revital Keren
    Revital Keren avatar
    26 posts
    Member since:
    Jun 2008

    Posted 31 Aug 2008 Link to this post

    Hi,
    I'm using RadGrid with a DataTable as a DataSource.
    I would like to filter the rows displayed in the grid on page_load, but I do not want the filter to be displayed to the client...
    (I want to filter programmatically by using a filterValue extracted from the pages's request object.)
    I've looked around forums etc and haven't found any code that shows data filtering  - only one that uses a column filter which interacts with the user.

    please help... :(

    thank you,
    Revital
  2. Princy
    Princy avatar
    17421 posts
    Member since:
    Mar 2007

    Posted 01 Sep 2008 Link to this post

    Hello Revital,

    You can try out the following code to apply filter on page load.
    cs:
    protected void RadGrid1_PreRender(object sender, EventArgs e) 
        {         
           if (!Page.IsPostBack) 
            { 
                string filterValue = Request.QueryString["filter"].ToString();            
                RadGrid1.MasterTableView.FilterExpression = "([ProductName] LIKE \'%"+ filterValue +"%\') ";  
                GridColumn column = RadGrid1.MasterTableView.GetColumnSafe("ProductName"); 
                column.CurrentFilterFunction = GridKnownFunction.Contains; 
                RadGrid1.MasterTableView.Rebind(); 
            } 
        } 
    For more information on how to apply filter on initial load, refer to this link.

    And to hide the filtering item you can try the code shown below.
    protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) 
        { 
           if(e.Item is GridFilteringItem) 
            { 
               e.Item.Display = false
            } 
        } 

    Princy.
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Revital Keren
    Revital Keren avatar
    26 posts
    Member since:
    Jun 2008

    Posted 01 Sep 2008 Link to this post

    First of all thank you for your reply.
    I have tried this code and now I'm getting the following exception :
    Telerik.Web.UI.ParseException was caught
      Message="No property or field 'Serial' exists in type 'DataRowView'"
      Source="Telerik.Web.UI"
      Position=1
      StackTrace:
           at Telerik.Web.UI.ExpressionParser.ParseMemberAccess(Type type, Expression instance)
           at Telerik.Web.UI.ExpressionParser.ParseIdentifier()
           at Telerik.Web.UI.ExpressionParser.ParsePrimaryStart()
           at Telerik.Web.UI.ExpressionParser.ParsePrimary()
           at Telerik.Web.UI.ExpressionParser.ParseUnary()
           at Telerik.Web.UI.ExpressionParser.ParseMultiplicative()
           at Telerik.Web.UI.ExpressionParser.ParseAdditive()
           at Telerik.Web.UI.ExpressionParser.ParseComparison()
           at Telerik.Web.UI.ExpressionParser.ParseLogicalAnd()
           at Telerik.Web.UI.ExpressionParser.ParseLogicalOr()
           at Telerik.Web.UI.ExpressionParser.ParseExpression()
           at Telerik.Web.UI.ExpressionParser.ParseParenExpression()
           at Telerik.Web.UI.ExpressionParser.ParsePrimaryStart()
           at Telerik.Web.UI.ExpressionParser.ParsePrimary()
           at Telerik.Web.UI.ExpressionParser.ParseUnary()
           at Telerik.Web.UI.ExpressionParser.ParseMultiplicative()
           at Telerik.Web.UI.ExpressionParser.ParseAdditive()
           at Telerik.Web.UI.ExpressionParser.ParseComparison()
           at Telerik.Web.UI.ExpressionParser.ParseLogicalAnd()
           at Telerik.Web.UI.ExpressionParser.ParseLogicalOr()
           at Telerik.Web.UI.ExpressionParser.ParseExpression()
           at Telerik.Web.UI.ExpressionParser.Parse(Type resultType)
           at Telerik.Web.UI.DynamicExpression.ParseLambda(ParameterExpression[] parameters, Type resultType, String expression, Object[] values)
           at Telerik.Web.UI.DynamicExpression.ParseLambda(Type itType, Type resultType, String expression, Object[] values)
           at Telerik.Web.UI.GridDynamicQueryable.Where(IQueryable source, String predicate, Object[] values)
           at Telerik.Web.UI.GridDataTableFromEnumerable.FillData35()
           at Telerik.Web.UI.GridDataTableFromEnumerable.FillData()
           at Telerik.Web.UI.GridResolveEnumerable.Initialize()
           at Telerik.Web.UI.GridResolveEnumerable.EnsureInitialized()
           at Telerik.Web.UI.GridResolveEnumerable.get_DataTable()
           at Telerik.Web.UI.GridEnumerableFromDataView..ctor(GridTableView owner, DataView dataView, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields)
           at Telerik.Web.UI.GridDataSourceHelper.CreateGridEnumerable(GridTableView owner, IEnumerable enumerable, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields)
           at Telerik.Web.UI.GridDataSourceHelper.GetResolvedDataSource(GridTableView owner, Object dataSource, String dataMember, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields)
           at Telerik.Web.UI.GridTableView.get_ResolvedDataSource()
           at Telerik.Web.UI.GridTableView.CreateChildControls(IEnumerable dataSource, Boolean useDataSource)
           at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data)
           at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data)
           at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
           at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
           at Telerik.Web.UI.GridTableView.PerformSelect()
           at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
           at Telerik.Web.UI.GridTableView.DataBind()
           at Telerik.Web.UI.GridTableView.Rebind()
           at Reforma.Web.Application.SubsInfo.inRadGrid_PreRender(Object sender, EventArgs e) in C:\Reforma\Reforma.Web.Application\Meida\SubsInfo.aspx.cs:line 296
      InnerException:



    while "Serial" is the column i'm trying to filter by.
    I perform this action on 4 different tables on the page and the exception is thrown only when the table is not empty, on the Rebind() call.


    please help me , I've been banging my head on this problem  for at least 12h.... :(
  5. Answer
    Shinu
    Shinu avatar
    17764 posts
    Member since:
    Mar 2007

    Posted 01 Sep 2008 Link to this post

    Hi Revital Keren,

    How do you bind the Grid? Try populating the Grid in the NeedDataSource event. Go through the following demo link to get details about AdvanceDataBinding techniques.
    Advanced data-binding

    Thanks
    Shinu.
  6. Marco Basta
    Marco Basta avatar
    6 posts
    Member since:
    Mar 2006

    Posted 02 Sep 2008 Link to this post

    Shinu,
    I am having a similar problem. My columns are autogenerated and I use NeedDataSource event to set the DataSource property of the Grid to the table returned by my data access layer.

    Grid.DataSource = tbl

    Then in the Pre-Render event, I added th ecode below wich generates the error below it when I add the statement: Me.RadGridCMReview.MasterTableView.FilterExpression = "([AAMC_ID] = " & header.AAMC_ID.ToString & ")"

    And works fine to the point of showing the filter value on the grid column but no filtering is taking place (Grid still shows all records).

    Here i sthe code in Pre-Render:
    Dim col As GridBoundColumn = Me.RadGridCMReview.MasterTableView.GetColumn("AAMC_ID")

    col.CurrentFilterFunction = GridKnownFunction.EqualTo

    col.CurrentFilterValue = header.AAMC_ID.ToString

    Me.RadGridCMReview.Rebind()

    ERROR:
    [PaeException: Expression expected]
       Telerik.Web.UI.ExpressionParser.ParsePrimaryStart() +120
       Telerik.Web.UI.ExpressionParser.ParsePrimary() +11
       Telerik.Web.UI.ExpressionParser.ParseUnary() +275
       Telerik.Web.UI.ExpressionParser.ParseMultiplicative() +34
       Telerik.Web.UI.ExpressionParser.ParseAdditive() +32
       Telerik.Web.UI.ExpressionParser.ParseComparison() +32
       Telerik.Web.UI.ExpressionParser.ParseLogicalAnd() +34
       Telerik.Web.UI.ExpressionParser.ParseLogicalOr() +34
       Telerik.Web.UI.ExpressionParser.ParseExpression() +22
       Telerik.Web.UI.ExpressionParser.ParseParenExpression() +128
       Telerik.Web.UI.ExpressionParser.ParsePrimaryStart() +68
       Telerik.Web.UI.ExpressionParser.ParsePrimary() +11
       Telerik.Web.UI.ExpressionParser.ParseUnary() +275
       Telerik.Web.UI.ExpressionParser.ParseMultiplicative() +34
       Telerik.Web.UI.ExpressionParser.ParseAdditive() +32
       Telerik.Web.UI.ExpressionParser.ParseComparison() +32
       Telerik.Web.UI.ExpressionParser.ParseLogicalAnd() +34
       Telerik.Web.UI.ExpressionParser.ParseLogicalOr() +34
       Telerik.Web.UI.ExpressionParser.ParseExpression() +22
       Telerik.Web.UI.ExpressionParser.Parse(Type resultType) +18
       Telerik.Web.UI.GridDynamicQueryable.Where(IQueryable source, String predicate, Object[] values) +131
       Telerik.Web.UI.GridDataTableFromEnumerable.FillData35() +2972
       Telerik.Web.UI.GridDataTableFromEnumerable.FillData() +592
       Telerik.Web.UI.GridResolveEnumerable.Initialize() +29
       Telerik.Web.UI.GridResolveEnumerable.EnsureInitialized() +17
       Telerik.Web.UI.GridEnumerableFromDataView..ctor(GridTableView owner, DataView dataView, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields) +152
       Telerik.Web.UI.GridDataSourceHelper.CreateGridEnumerable(GridTableView owner, IEnumerable enumerable, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields) +76
       Telerik.Web.UI.GridDataSourceHelper.GetResolvedDataSource(GridTableView owner, Object dataSource, String dataMember, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields) +95
       Telerik.Web.UI.GridTableView.get_ResolvedDataSource() +238
       Telerik.Web.UI.GridTableView.CreateChildControls(IEnumerable dataSource, Boolean useDataSource) +32
       System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +59
       System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +111
       System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +29
       System.Web.UI.WebControls.DataBoundControl.PerformSelect() +149
       Telerik.Web.UI.GridTableView.PerformSelect() +4
       System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +70
       Telerik.Web.UI.GridTableView.DataBind() +304
       Telerik.Web.UI.RadGrid.DataBind() +77
       Telerik.Web.UI.RadGrid.AutoDataBind(GridRebindReason rebindReason) +132
       Telerik.Web.UI.RadGrid.Rebind() +9
       _CM_Review_CMReviewCtl.Page_PreRender(Object sender, EventArgs e) +606
       System.Web.UI.Control.OnPreRender(EventArgs e) +2117788
       System.Web.UI.Control.PreRenderRecursiveInternal() +86
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2041

  7. Shinu
    Shinu avatar
    17764 posts
    Member since:
    Mar 2007

    Posted 03 Sep 2008 Link to this post

    Hi Marco,

    Do you have DataBind() anywhere in the code behind? Try using Rebind() instead of DataBind().

    Shinu.
  8. Yavor
    Admin
    Yavor avatar
    11 posts

    Posted 03 Sep 2008 Link to this post

    Hello Marco,

    You can try setting the filter expression as shown in the following example.
    Give this a try and let me know how it goes.

    Greetings,
    Yavor
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  9. Marco Basta
    Marco Basta avatar
    6 posts
    Member since:
    Mar 2006

    Posted 03 Sep 2008 Link to this post

    Telerik Team,
    First, I am using Telerik.Web.UI.dll version: 2008.1.619.35
    Second, the ideal example I was looking for is on an integer column where I'd like to use EqualTo filter, but I digressed to a string example with "Contains" filter to mimic your example and try to duplicate the error I was getting with the integer column.
    Please follow these steps to see the error I am getting:

    1- Create an ASP.NET 3.5 website using visual studio 2008
    2- Paste this code inside the <form> ... </form> tags of the Default.aspx page:

    <asp:ScriptManager ID="ScriptManager1" runat="server">

    </asp:ScriptManager>

    <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server">

    <telerik:RadGrid ID="RadGridCMReview" runat="server"

    AllowPaging="true" PageSize="20" PagerStyle-Position="TopAndBottom"

    PagerStyle-Mode="NextPrevAndNumeric"

    AllowFilteringByColumn="True" AllowSorting="True" GridLines="Both"

    ShowFooter="True" ShowGroupPanel="True" Skin="Sunset"

    AutoGenerateColumns="true" AllowMultiRowSelection="true" >

    <MasterTableView >

    <HeaderStyle width="85px" />

    <Columns>

    <telerik:GridClientSelectColumn Reorderable="False" UniqueName="ClientSelectColumn">

    <HeaderStyle Width="25px"></HeaderStyle>

    </telerik:GridClientSelectColumn>

    <telerik:GridButtonColumn commandname="ViewMOAR" uniquename="View" Text="File" ButtonType="LinkButton">

    <HeaderStyle Width="35px"></HeaderStyle>

    </telerik:GridButtonColumn>

    </Columns>

    <RowIndicatorColumn Visible="False">

    <HeaderStyle Width="20px"></HeaderStyle>

    </RowIndicatorColumn>

    <ExpandCollapseColumn Visible="False" Resizable="False">

    <HeaderStyle Width="20px"></HeaderStyle>

    </ExpandCollapseColumn>

    </MasterTableView>

    <HeaderStyle Font-Bold="True" Font-Italic="False" Font-Overline="False"

    Font-Strikeout="False" Font-Underline="False" Wrap="True" />

    <ClientSettings AllowColumnsReorder="True" AllowDragToGroup="True"

    ReorderColumnsOnClient="True">

    <Selecting AllowRowSelect="True" />

    </ClientSettings>

    <PagerStyle Mode="NextPrevAndNumeric" Position="TopAndBottom" />

    </telerik:RadGrid>

    </telerik:RadAjaxPanel>

    3- Paste this code in the Default.aspx.vb (overwrite everything there):

    Imports System.Data

    Imports

    Telerik.Web.UI

    Partial

    Class _Default

    Inherits System.Web.UI.Page

    Protected Sub RadGridCMReview_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGridCMReview.NeedDataSource

    Dim dt As New System.Data.DataTable()

    Dim dr As System.Data.DataRow

    dt.Columns.Add(

    New DataColumn("College_ID", GetType(Integer)))

    dt.Columns.Add(

    New DataColumn("College_Name", GetType(String)))

    dt.Columns.Add(

    New DataColumn("Description", GetType(String)))

    dr = dt.NewRow()

    dr(0) = 1

    dr(1) =

    "UMass"

    dr(2) =

    "test information"

    dt.Rows.Add(dr)

    dr = dt.NewRow()

    dr(0) = 2

    dr(1) =

    "Duke University"

    dr(2) =

    "This is Duke University"

    dt.Rows.Add(dr)

    Me.RadGridCMReview.DataSource = dt

    End Sub

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender

    If Not IsPostBack Then

    '' THE FOLLOWING LINE CAUSES AN ERROR

    Me.RadGridCMReview.MasterTableView.FilterExpression = "([College_Name] LIKE '%UMas%')"

    Dim col As GridBoundColumn = Me.RadGridCMReview.MasterTableView.GetColumnSafe("College_Name")

    col.CurrentFilterFunction = GridKnownFunction.Contains

    col.CurrentFilterValue =

    "UMas"

    Me.RadGridCMReview.MasterTableView.Rebind()

    End If

    End Sub

    End

    Class

    4- Run the project without the line that causes the error and with it.

    Thanks
    Marco

  10. Shinu
    Shinu avatar
    17764 posts
    Member since:
    Mar 2007

    Posted 04 Sep 2008 Link to this post

    Hi Marco,

    Have you properly set the Event handlers for the NeedDataSource and PreRender events?

    ASPX:
     <telerik:radgrid id="RadGrid1"  runat="server" onneeddatasource="RadGrid1_NeedDataSource" OnItemDataBound="RadGrid1_ItemDataBound" OnPreRender="RadGrid1_PreRender" > 
          


    Shinu
  11. Marco Basta
    Marco Basta avatar
    6 posts
    Member since:
    Mar 2006

    Posted 04 Sep 2008 Link to this post

    Shinu,
    That is weird. I have been using the grid and many of its events you mentioned for at least 3 years and never had to do it on the aspx code. Besides, the event handlers in the code behind are being hit. So I don't believe that is the issue. The issue is why the folowing line is causing the error?:

    Me.RadGridCMReview.MasterTableView.FilterExpression = "([College_Name] LIKE '%UMas%')"

    Did you event test my code with (or without) your recommendation?

    Thanks

    Marco
  12. Yavor
    Admin
    Yavor avatar
    11 posts

    Posted 05 Sep 2008 Link to this post

    Hi Marco,

    The code is correct, and does cause the exception in question.
    To make sure it does not cause such an exception, please disable the linq expressions for the control:

    .aspx
    <telerik:RadGrid EnableLinqExpressions="false" 

    This will eliminate the problem.

    Greetings,
    Yavor
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  13. Marco Basta
    Marco Basta avatar
    6 posts
    Member since:
    Mar 2006

    Posted 05 Sep 2008 Link to this post

    Thanks Yavor. That worked!
  14. Mehdi Mirza
    Mehdi Mirza avatar
    11 posts
    Member since:
    Apr 2009

    Posted 04 Jun 2009 Link to this post

    I spent 3 hours trying to solve this error, 
    This simple one line solution was all i needed

    MM
  15. Mario
    Mario avatar
    24 posts
    Member since:
    Apr 2009

    Posted 06 Jan 2010 Link to this post

    Me too, I was struggling with an "expression expected" exception

    and thats all I needed:

    grid.EnableLinqExpressions =

    false;

    Now is working, so just in case somebody else is running also into that same exception

     

  16. t@rn
    t@rn avatar
    2 posts
    Member since:
    Apr 2010

    Posted 23 May 2011 Link to this post

    I have same problem and this solution works for me too.
    Thank you very much
  17. Gene
    Gene avatar
    64 posts
    Member since:
    Dec 2007

    Posted 18 Oct 2011 Link to this post

    Can someone offer an explanation as to why changing EnableLinqExpressions="false"  fixes the problem?
  18. Sebastian
    Admin
    Sebastian avatar
    9934 posts

    Posted 19 Oct 2011 Link to this post

    Hello Gene,

    You can find the requested information in this documentation article (refer to the table at the bottom of it).

    Best regards,
    Sebastian
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
  19. Ripunjay
    Ripunjay avatar
    9 posts
    Member since:
    May 2011

    Posted 19 Nov 2011 Link to this post

    Hi guys,

    Is it possible to capture the click events of the filtering options?
    For example, if I click 'No Filter' on the filter options, is it possible to capture the event on my server side?
    I have applied filter on page load using the standard method. But on clicking 'No Filter' after the page has loaded, the grid still returns the filtered data. I need to rebind my original dataset on clicking 'No Filter'.

    Please help.

    Thanks,
    Ripunjay
  20. Jayesh Goyani
    Jayesh Goyani avatar
    2732 posts
    Member since:
    May 2010

    Posted 19 Nov 2011 Link to this post

    Hello,

    protected void RadGrid1_ItemCommand(object source, Telerik.WebControls.GridCommandEventArgs e)
    {
    if (e.CommandName == RadGrid.FilterCommandName && ((Pair)e.CommandArgument).Second == "YourName" &&
    ((Pair)e.CommandArgument).First != "NoFilter")
    {
    }
    }

    Thanks,
    Jayesh Goyani
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017