RadGrid enable filter code behind

5 posts, 1 answers
  1. Suzy
    Suzy avatar
    66 posts
    Member since:
    Nov 2014

    Posted 16 Apr 2015 Link to this post

    Hi,

    I have a radgrid with filter on field set on.  I need to be able to set the filter of a specific field to a fixed value and enable the filter field.  But this is user dependant.

    How can I accomplish this?

    My radgrid :

    <telerik:RadGrid ID="grdCodes" GridLines="None" runat="server" PageSize="20" AllowPaging="True" AutoGenerateColumns="False" AllowFilteringByColumn="true"
               OnInsertCommand="grdCodes_InsertCommand" OnUpdateCommand="grdCodes_UpdateCommand"
               OnNeedDataSource="grdCodes_NeedDataSource" OnItemDataBound="grdCodes_ItemDataBound" OnItemCreated="grdCodes_ItemCreated" OnPreRender="grdCodes_PreRender" >
               <MasterTableView CommandItemDisplay="Top" HorizontalAlign="NotSet" EditMode="InPlace" AutoGenerateColumns="False">
                   <Columns>
                       <telerik:GridEditCommandColumn UniqueName="EditColumn" ButtonType="ImageButton" ItemStyle-Width="10px" />
     
                       <telerik:GridTemplateColumn HeaderText="System" ItemStyle-Width="20%" SortExpression="system" UniqueName="system" DataField="system">
                           <FilterTemplate>
                               <telerik:RadComboBox ID="ddlSystemFilter" runat="server" OnClientSelectedIndexChanged="FilterSystemIndexChanged" AppendDataBoundItems="true" SelectedValue='<%# ((GridItem)Container).OwnerTableView.GetColumn("system").CurrentFilterValue %>'>
                                   <Items>
                                       <telerik:RadComboBoxItem Text="All" />
                                   </Items>
                               </telerik:RadComboBox>
                               <telerik:RadScriptBlock ID="RadScriptBlock2" runat="server">
                                   <script type="text/javascript">
                                       function FilterSystemIndexChanged(sender, args) {
                                           var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>");
                                           tableView.filter("system", args.get_item().get_value(), "EqualTo");
                                       }
                                   </script>
                               </telerik:RadScriptBlock>
                           </FilterTemplate>
                           <ItemTemplate>
                               <%# CartaMundi.BusinessLogic.Codes.GetDescription(cmWeb.Classes.Constants.SYSTEM_GENERAL,"SYSTEM", DataBinder.Eval(Container.DataItem, "system")) %>
                           </ItemTemplate>
                           <EditItemTemplate>
                               <telerik:RadComboBox runat="server" ID="ddlSystem" ></telerik:RadComboBox>
                           </EditItemTemplate>
                       </telerik:GridTemplateColumn>
                       <telerik:GridBoundColumn DataField="field_name" HeaderStyle-Width="20%" HeaderText="Field name" SortExpression="field_name" UniqueName="field_name" ShowFilterIcon="false" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true">
                           <ColumnValidationSettings EnableRequiredFieldValidation="true">
                               <RequiredFieldValidator Text="<img src='/CMIT/Images/Warning.gif' border='0'>" Display="Dynamic" ToolTip="Field name is required." ErrorMessage="-Field name is required." ></RequiredFieldValidator>
                           </ColumnValidationSettings>
                       </telerik:GridBoundColumn>
                       <telerik:GridBoundColumn DataField="field_value" HeaderStyle-Width="20%" HeaderText="Field value" SortExpression="field_value" UniqueName="field_value" ShowFilterIcon="false" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true">
                           <ColumnValidationSettings EnableRequiredFieldValidation="true">
                               <RequiredFieldValidator Text="<img src='/CMIT/Images/Warning.gif' border='0'>" Display="Dynamic" ToolTip="Field value is required." ErrorMessage="-Field value is required." ></RequiredFieldValidator>
                           </ColumnValidationSettings>
                       </telerik:GridBoundColumn>
                       <telerik:GridBoundColumn DataField="description" HeaderStyle-Width="40%" HeaderText="Description" SortExpression="description" UniqueName="description" ShowFilterIcon="false" CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" >
                           <ColumnValidationSettings EnableRequiredFieldValidation="true">
                               <RequiredFieldValidator Text="<img src='/CMIT/Images/Warning.gif' border='0'>" Display="Dynamic" ToolTip="Description is required." ErrorMessage="-Description is required." ></RequiredFieldValidator>
                           </ColumnValidationSettings>
                       </telerik:GridBoundColumn>
                   </Columns>
               </MasterTableView>
               <ClientSettings AllowKeyboardNavigation="true"></ClientSettings>
           </telerik:RadGrid>

    The fields that can have fixed values is the GridTemplateColumn 'System' and the GridBoundColumn 'field_value'

    I was able to set the default value but there is was no option to set the field enabled.

    protected void grdCodes_PreRender(object sender, EventArgs e)
    {
         
            if (BLogic.UserRights.Authorised(CurrentUser, "ProjectGroups", "*DSP", Classes.Constants.SYSTEM_DESIGN ))
            {
                grdCodes.MasterTableView.FilterExpression = "(Convert.ToString(it[\"system\"]) = \"" + cmWeb.Classes.Constants.SYSTEM_DESIGN + "\") AND (it[\"field_name\"].ToString().Contains(\"PRJGROUPS\"))";
                GridColumn column = grdCodes.MasterTableView.GetColumnSafe("system");
                column.CurrentFilterFunction = GridKnownFunction.EqualTo;
                column.CurrentFilterValue = cmWeb.Classes.Constants.SYSTEM_DESIGN;
                column = grdCodes.MasterTableView.GetColumnSafe("field_name");
                column.CurrentFilterFunction = GridKnownFunction.EqualTo;
                column.CurrentFilterValue = "PRJGROUPS";
                                     
                grdCodes.MasterTableView.Rebind();
     
            }
    }
     

    There are users that may not be able to select other values in the filter and have a fixed value.  Other user must be are able to use the filter as they wish.

    The part of the code '(BLogic.UserRights.Authorised(CurrentUser, "ProjectGroups", "*DSP", Classes.Constants.SYSTEM_DESIGN ))' decides if the users has limitid selection options.

    Can this be done?

    Kind regards

    Suzy

     

     

  2. Eyup
    Admin
    Eyup avatar
    3006 posts

    Posted 21 Apr 2015 Link to this post

    Hi Suzy,

    Please note that modifying the FilterExpression is quite tricky and it can be error-prone, therefore, it is not recommended.

    Instead, you can use the filter method:
    https://admin.telerik.com/docs.telerik.com/devtools/aspnet-ajax/controls/grid/client-side-programming/gridtableview-object/methods/filter

    You can examine an actual implementation in the following live sample:
    http://demos.telerik.com/aspnet-ajax/grid/examples/functionality/filtering/filter-templates/defaultcs.aspx

    Alternatively, you can use the FireCommandEvent method to achieve the requested functionality on the code-behind:
    http://www.telerik.com/help/aspnet-ajax/grid-fire-command-event-from-code.html


    For example, in case you want to apply an initial filter, you can use the following approach:
    Copy Code
    Copy Code
    Copy Code
    protected void RadGrid1_PreRender(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            GridFilteringItem filterItem = RadGrid1.MasterTableView.GetItems(
                 GridItemType.FilteringItem)[0] as GridFilteringItem;
      
            GridColumn col = RadGrid1.MasterTableView.GetColumn("ShipName");
            col.CurrentFilterValue = "Success";
            filterItem.FireCommandEvent("Filter", new Pair("StartsWith", "ShipName"));
        }
    }

    In addition you can also set the AllowFiltering property of the column to false if the user would not be allowed to filter.

    Hope this helps.


    Regards,
    Eyup
    Telerik
     

    See What's Next in App Development. Register for TelerikNEXT.

     
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Suzy
    Suzy avatar
    66 posts
    Member since:
    Nov 2014

    Posted 21 Apr 2015 Link to this post

    Hi Eyup,

    It's the last sentence that I'm not able to do :

    In addition you can also set the AllowFiltering property of the column to false if the user would not be allowed to filter.

    There is no AllowFiltering for the GridColumn.

    Can you please give an example of setting the column to AllowFiltering False?

    Kind regards

     Suzy

  5. Answer
    Eyup
    Admin
    Eyup avatar
    3006 posts

    Posted 22 Apr 2015 Link to this post

    Hi Suzy,

    You should cast the column to the specific type, e.g. GridBoundColumn. You can also cast it to IGridDataColumn for a more generic solution.

    Please give it a try and let me know how it goes.

    Regards,
    Eyup
    Telerik
     

    See What's Next in App Development. Register for TelerikNEXT.

     
  6. Suzy
    Suzy avatar
    66 posts
    Member since:
    Nov 2014

    Posted 23 Apr 2015 Link to this post

    Thanks Eyup,

     I used the IGridDataColumn and it works!

    Thanks a lot.

    Suzy

Back to Top
UI for ASP.NET Ajax is Ready for VS 2017