This is a migrated thread and some comments may be shown as answers.

RadGrid Custom Filter Requested value 'null' was not found Issue

3 Answers 139 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Mahesh Babu
Top achievements
Rank 1
Mahesh Babu asked on 29 Jul 2009, 04:36 AM
Hi,

I have a radgrid to which I am trying to create custom filter by using http://www.telerik.com/help/aspnet-ajax/grdcustomfilteroptionswithhandling.html article. I am not able to see onClick event on GridFilterMenu class. When I add onItemClick event, I am getting the following error;

System.ArgumentException: Requested value 'null' was not found.

code:

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

                <asp:ScriptManager ID="scrp" runat="server"></asp:ScriptManager>
    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
    </telerik:RadAjaxLoadingPanel>
   <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel2" runat="server">
        <img id="imgid" src="images/loading.gif" alt="Loading" />
    </telerik:RadAjaxLoadingPanel>
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" >
        <AjaxSettings>
           
             <telerik:AjaxSetting AjaxControlID="radioYes">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="radGrid" LoadingPanelID="RadAjaxLoadingPanel1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
              <telerik:AjaxSetting AjaxControlID="radioNo">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="radGrid" LoadingPanelID="RadAjaxLoadingPanel1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>
          
               
    
            <telerik:RadGrid ID="radGrid" runat="server" AutoGenerateColumns="true" AllowPaging="true"
                 PageSize="5" EnableAjaxSkinRendering="true" AllowFilteringByColumn="true"
                Skin="Office2007">
                <PagerStyle Mode="NextPrevNumericAndAdvanced" AlwaysVisible="true" />
            </telerik:RadGrid>
    </div>
    </form>
</body>
</html>


Default.aspx.cs

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Telerik.Web.UI;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            LoadRadGrid();
        }

    }

    protected void Page_Init(object sender, EventArgs e)
    {
        AddCustomGridFilters();
    }

    public void AddCustomGridFilters()
    {
        radGrid.FilterMenu.Items.Clear();
        RadMenuItem[] radMenuItems = new RadMenuItem[7];
        for (int index = 0; index < radMenuItems.Length; index++)
        {
            radMenuItems[index] = new RadMenuItem();
            radGrid.FilterMenu.Items.Add(radMenuItems[index]);
        }
        radMenuItems[0].Text = Constants.EqualTo;
        radMenuItems[1].Text = Constants.StartsWith;
        radMenuItems[2].Text = Constants.EndsWith;
        radMenuItems[3].Text = Constants.LessThan;
        radMenuItems[4].Text = Constants.GreaterThan;
        radMenuItems[5].Text = Constants.Contains;
        radMenuItems[6].Text = Constants.NoFilter;

        (radGrid.FilterMenu as GridFilterMenu).ItemClick += new RadMenuEventHandler(_Default_ItemClick);

    }

    void _Default_ItemClick(object sender, RadMenuEventArgs e)
    {
        //Do something.
    }

   

    private void LoadRadGrid()
    {
        

        this.radGrid.DataSource = GetDataTable();
        this.radGrid.DataBind();
    }

    private DataTable GetDataTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("ID"));
        dt.Columns.Add(new DataColumn("Name"));
        dt.Columns.Add(new DataColumn("Marks"));

        DataRow dr = dt.NewRow();
        dr["ID"] = 1;
        dr["Name"] = "Mahesh";
        dr["Marks"] = 100;
        dt.Rows.Add(dr);

        dr = dt.NewRow();
        dr["ID"] = 2;
        dr["Name"] = "Rajesh";
        dr["Marks"] = 55;
        dt.Rows.Add(dr);

        dr = dt.NewRow();
        dr["ID"] = 3;
        dr["Name"] = "Kishore";
        dr["Marks"] = 89;
        dt.Rows.Add(dr);

        dr = dt.NewRow();
        dr["ID"] = 4;
        dr["Name"] = "Sasi";
        dr["Marks"] = 44;
        dt.Rows.Add(dr);

        dr = dt.NewRow();
        dr["ID"] = 5;
        dr["Name"] = "Kamesh";
        dr["Marks"] = 78;
        dt.Rows.Add(dr);

        return dt;
    }

    //This class contains all the constants
    public class Constants
    {
        public const string CrtSegment = "crt";
        public const string FleetSegment = "fleet";

        // Numeric And String Constants
        public const string EqualTo = "EqualTo";
        public const string NotEqualTo = "NotEqualTo";
        public const string GreaterThan = "More than";
        public const string LessThan = "Less than";
        public const string GreaterThanOrEqualTo = "GreaterThanOrEqualTo";
        public const string LessThanOrEqualTo = "LessThanOrEqualTo";
        public const string Between = "Between";
        public const string NotBetween = "NotBetween";
        public const string ISNull = "IsNull";
        public const string ISNotNull = "NotIsNull";
        public const string NoFilter = "No filter";

        // String Constants
        public const string Contains = "Contains...";
        public const string DoesNotContain = "DoesNotContain";
        public const string StartsWith = "Starts with...";
        public const string EndsWith = "Ends with...";
        public const string IsEmpty = "IsEmpty";
        public const string IsNotEmpty = "IsNotEmpty";

        //RadContextMenu Constants
        public const string ShowColumn = "Show column";
        public const string HideColumn = "Hide column";
        public const string RestoreAll = "Restore All";

    }

}


Thanks,
Mahesh

3 Answers, 1 is accepted

Sort by
0
Sebastian
Telerik team
answered on 31 Jul 2009, 03:57 PM
Hello Mahesh,

You merely need to set AutoPostBack = true for the filtering menu of the grid and the respective server event will be raised as expected. Namely:

protected void Page_Init(object sender, System.EventArgs e)  
{  
  RadGrid1.FilterMenu.Items.Clear();  
  GridFilterMenu filterMenu = RadGrid1.FilterMenu;  
 
  RadMenuItem menuItem = new RadMenuItem();  
  RadGrid1.FilterMenu.Items.Add(menuItem);  
  menuItem.Text = "Custom-Text (Contains)";  
  menuItem.Value = "Contains";  
  filterMenu.AutoPostBack = true;  
}  
protected void filterMenu_OnClick(object sender, RadMenuEventArgs e)  
{  
  GridFilteringItem filterItem = RadGrid1.MasterTableView.GetItems(GridItemType.FilteringItem)[0] as GridFilteringItem;  
  filterItem.FireCommandEvent( "Filter"new Pair(e.Item.Value, e.Item.Attributes["columnUniqueName"]));  
 
}  
 

The respective help topic will be updated accordingly for the next versions of the RadGrid documentation. Thank you for drawing our attention to this detail - your Telerik points have been updated for the feedback.

Kind regards,
Sebastian
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Check out the tips for optimizing your support resource searches.
0
Mahesh Babu
Top achievements
Rank 1
answered on 05 Aug 2009, 04:40 AM
Hi,

I am not able to see AutoPostBack on GridFilterMenu.

Any suggestions please???

Thanks,
Mahesh
0
Sebastian
Telerik team
answered on 07 Aug 2009, 01:08 PM
Hello Mahesh,

Please excuse me for the mistake I made in my previous reply. The actual syntax should be:

protected void Page_Init(object sender, System.EventArgs e)  
{  
 RadGrid1.FilterMenu.Items.Clear();  
 GridFilterMenu filterMenu = RadGrid1.FilterMenu;  
 RadMenuItem menuItem = new RadMenuItem();  
 RadGrid1.FilterMenu.Items.Add(menuItem);  
 menuItem.Text = "Custom-Text (Contains)";  
 menuItem.Value = "Contains";  
 filterMenu.ItemClick+= new RadMenuEventHandler(filterMenu_ItemClick);  
}  
protected void filterMenu_ItemClick(object sender, RadMenuEventArgs e)  
{  
 GridFilteringItem filterItem = RadGrid1.MasterTableView.GetItems(GridItemType.FilteringItem)[0] as GridFilteringItem;  
 filterItem.FireCommandEvent( "Filter"new Pair(e.Item.Value, e.Item.Attributes["columnUniqueName"]));  

because the GridFilterMenu class do not have AutoPostBack property. You only need to wire its ItemClick event which should be visible in the code-behind (I verified that locally).

Also make sure that you are using the latest version 2009.2.701 of RadContols for ASP.NET AJAX.
 
Best regards,
Sebastian
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Check out the tips for optimizing your support resource searches.
Tags
Grid
Asked by
Mahesh Babu
Top achievements
Rank 1
Answers by
Sebastian
Telerik team
Mahesh Babu
Top achievements
Rank 1
Share this question
or