{
  "$schema": "https://ai.syncfusion.com/schema/registry-item.json",
  "name": "grid-default-filtering",
  "framework": "blazor",
  "type": "registry:component",
  "component": "Grid",
  "variant": "default-filtering",
  "dependencies": [
    "Syncfusion.Blazor.Grids"
  ],
  "description": "Product grid combines paging with configurable filter-bar operators and filter modes across category, product, and quantity columns.",
  "meta": {
    "essentialStudioRelease": "2026 Volume 2 (v34.1.29)",
    "license": "commercial-or-community",
    "licenseNote": "The Syncfusion package is licensed. The composition in this file is source you own and edit. See https://ai.syncfusion.com/licensing.md",
    "requiresLicenseKey": true,
    "requiresServerEndpoint": false,
    "platformIndex": "https://ai.syncfusion.com/blazor/llms.txt",
    "skillPack": "syncfusion/blazor-ui-components-skills",
    "docs": "https://ai.syncfusion.com/gallery/blazor/grid-default-filtering.md"
  },
  "files": [
    {
      "target": "src/components/grid-default-filtering/DataSource.cs",
      "content": "namespace BlazorDemos.Pages.Grid\n{\n    public class Category\n    {\n\n        public Category()\n        {\n\n        }\n        public Category(string CategoryName, string ProductName, string QuantityPerUnit, bool Discontinued, short UnitsInStock)\n        {\n\n            this.CategoryName = CategoryName;\n            this.ProductName = ProductName;\n            this.QuantityPerUnit = QuantityPerUnit;\n            this.UnitsInStock = UnitsInStock;\n            this.Discontinued = Discontinued;\n        }\n\n        public static IReadOnlyList<Category> GetAllRecords()\n        {\n            List<Category> category = new List<Category>();\n            category.Add(new Category(\"Beverages\", \"Chai\", \"10 boxes x 20 bags\", true, 39));\n            category.Add(new Category(\"Condiments\", \"Chef Anton's Cajun Seasoning\", \"48 - 6 oz jars\", false, 53));\n            category.Add(new Category(\"Dairy Categories\", \"Raclette Courdavault\", \"5 kg pkg.\", false, 79));\n            category.Add(new Category(\"Grains/Cereals\", \"Wimmers gute Semmelkndel\", \"20 bags x 4 pieces\", true, 22));\n            category.Add(new Category(\"Meat/Poultry\", \"Pt chinois\", \"24 boxes x 2 pies\", false, 115));\n            category.Add(new Category(\"Seafood\", \"Spegesild\", \"4 - 450 g glasses\", true, 95));\n            return category;\n        }\n\n        public string? CategoryName { get; set; }\n        public string? ProductName { get; set; }\n        public string? QuantityPerUnit { get; set; }\n        public short UnitsInStock { get; set; }\n        public bool Discontinued { get; set; }\n    }\n}\n"
    },
    {
      "target": "src/components/grid-default-filtering/Grid.razor",
      "content": "@page \"/datagrid/filtering\"\n@using Syncfusion.Blazor.Grids\n@using Syncfusion.Blazor.Buttons\n@using BlazorDemos.Pages.Grid\n\n<div class=\"col-lg-12 control-section\">\n    <div class=\"content-wrapper\">\n        <div class=\"row\">\n            <SfGrid @ref=\"Grid\" DataSource=\"@GridData\" AllowFiltering=\"true\" AllowPaging=\"true\">\n                <GridPageSettings PageCount=\"5\"></GridPageSettings>\n                <GridFilterSettings ShowFilterBarOperator=\"@showFilterBarOperator\" Mode=\"@filterMode\"></GridFilterSettings>\n                <GridColumns>\n                    <GridColumn Field=@nameof(Category.CategoryName) HeaderText=\"Category Name\" Width=\"120\"></GridColumn>\n                    <GridColumn Field=@nameof(Category.ProductName) HeaderText=\"Product Name\" Width=\"150\"></GridColumn>\n                    <GridColumn Field=@nameof(Category.QuantityPerUnit) HeaderText=\"Quantity per Unit\" Width=\"120\"></GridColumn>\n                    <GridColumn Field=@nameof(Category.UnitsInStock) HeaderText=\"Units in Stock\" Width=\"150\" TextAlign=\"TextAlign.Right\"></GridColumn>\n                    <GridColumn Field=@nameof(Category.Discontinued) HeaderText=\"Discontinued\" Width=\"150\" TextAlign=\"TextAlign.Center\" Type=\"ColumnType.Boolean\">\n                        <FilterTemplate>\n                            @{\n                                var FilterContext = (context as PredicateModel);\n                                bool? fValue = string.IsNullOrEmpty(FilterContext?.Value?.ToString()) ? null : (bool?)FilterContext.Value;\n                            }\n                            <SfCheckBox Checked=\"@fValue\"  EnableTriState=\"true\" ValueChange=\"OnValueChange\" TChecked=\"bool?\"></SfCheckBox>\n                        </FilterTemplate>\n                    </GridColumn>\n                </GridColumns>\n            </SfGrid>\n        </div>\n    </div>\n</div>\n@code{\n    public SfGrid<Category>? Grid { get; set; }\n    public List<Category>? GridData { get; set; }\n    private bool showFilterBarOperator { get; set; }\n    private bool isChecked = false;\n    private FilterBarMode filterMode = FilterBarMode.OnEnter;\n    private void onChange(Microsoft.AspNetCore.Components.ChangeEventArgs args)\n    {\n        if (args.Value != null)\n        {\n            showFilterBarOperator = (bool)args.Value;\n            filterMode = showFilterBarOperator ? FilterBarMode.Immediate : FilterBarMode.OnEnter;\n        }\n    }\n    protected override void OnInitialized()\n    {\n        GridData = Category.GetAllRecords().ToList();\n    }\n    private async Task OnValueChange(Syncfusion.Blazor.Buttons.ChangeEventArgs<bool?> args)\n    {\n        if(Grid != null){\n        if (args.Checked != null)\n            await Grid.FilterByColumnAsync(\"Discontinued\", \"equal\", args.Checked); //Perform filtering while check/uncheck the checkbox\n        else\n            await Grid.ClearFilteringAsync(\"Discontinued\");\n        }\n    }\n}"
    }
  ]
}