RadGrid Filtering Nullable ENUMS

3 posts, 0 answers
  1. Claes
    Claes avatar
    1 posts
    Member since:
    Feb 2011

    Posted 10 Feb 2011 Link to this post

    I had a problem that I just could not understand why it would not work.
    I use enums at times to populate dropdowns. For an example


    public enum Corporate
      [EnumMember] [Description("FD")] COMPANY,
      [EnumMember] [Description("IB")] INDUSTRY,
      [EnumMember] [Description("KD")] PRIVATE,
      [EnumMember] [Description("SLE")] SLEIPNER

    I want Company, Private etc to be populated in the dropdown and then get the description value back.
    Well, this has nothing to do with Telerik so far. My problem was when in my datacontract I was using nullable
    and wanted to use filter in my RadGrid. It would not work. I debugged my could and
    found that the FilterExpression was set to "([Corporate] = INDUSTRY)". Now, this is just plain wrong.
    It should be "([Corporate] = 'INDUSTRY')". Note the single quotation marks.

    I fixed this issue by adding DataType="System.String" and then the filtering looked ok, but nope
    it still did not work.

    Why did it not work?

    Well, it turned out that when I was using

    public Corporate Corporate { get; set; }

    in my contract it works, but when using a nullable property

    public Corporate? Corporate { get; set; }

    it did not work.

    I fixed it by adding another class called searchcriteria and use that one
    for my initial search containing my nullable Corporate and then my original class without nullable
    for the filtering. This is very irritating. Can someone at Telerik look into this matter.

    Best regards,

  2. Radoslav
    Radoslav avatar
    1564 posts

    Posted 16 Feb 2011 Link to this post

    Hello Claes,

    I am afraid filtering on an EnumType column is not a supported scenario. When the RadGrid is bound to the Enum types it will get the values corresponding to the enum option. For example:  0, 1, 2 ... To achieve the desired functionality you need to set the DataType="System.String" to the column and bound the RadGrid to the string representations of the enum options . In this way the RadGrid will convert the enum options to strings (in your case COMPANY, INDUSTRY.. ) and you could filter them.

    Additionally I am sending you a simple example which demonstrates this.

    the Telerik team
    Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.
  3. DevCraft R3 2016 release webinar banner
  4. Ross Presser
    Ross Presser avatar
    30 posts
    Member since:
    Dec 2008

    Posted 06 Jul 2012 Link to this post

    Here is a fairly easy way to achieve the same effect without a table as datasource. Assume assetItems is a protected property that returns a list of assetItem, the real datasource, and UsageType is the enum field in assetItem we need to turn to string:

        Protected Sub rGrid_NeedDataSource(ByVal sender As ObjectByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgsHandles rGrid.NeedDataSource
            rGrid.DataSource = (From x In assetItems
                                Select New assetItemX(x)).ToList()
        End Sub

        <Serializable()> _
        Protected Class assetItemX
            Inherits aleyant.w2pPlatform.AssetItem
            Public Sub New(x As aleyant.w2pPlatform.AssetItem)
                AssetID = x.AssetID
                AssetType = x.AssetType
                Name = x.Name
    ' (omitted rest of fields)
            End Sub
            Public ReadOnly Property UsageTypeString As String
                    Return UsageType.ToString()
                End Get
            End Property
        End Class

    Now you can bind the radgrid column to UsageTypeString instead of UsageType.

    ETA: the AssetX class must be marked serializable or the page will complain sometimes.
Back to Top