diff --git a/knowledge-base/listview-searchbox.md b/knowledge-base/listview-searchbox.md
new file mode 100644
index 0000000000..62becb489b
--- /dev/null
+++ b/knowledge-base/listview-searchbox.md
@@ -0,0 +1,125 @@
+---
+title: ListView SearchBox
+description: How to implement a ListView search box that filters by multiple data fields.
+type: how-to
+page_title: ListView Search Box
+slug: listview-searchbox
+position:
+tags: listview,search,searchbox,filter,filtering
+ticketid: 1536554
+res_type: kb
+---
+
+## Description
+
+How to implement a ListView seach box, similar to the [SearchBox in the Blazor Grid](https://demos.telerik.com/blazor-ui/grid/searchbox)? I would like to use a single input to search and filter in all data fields of the ListView data.
+
+## Solution
+
+It is possible to search and filter the ListView programmatically. The example below is a modified version of the [ListView filtering demo](https://demos.telerik.com/blazor-ui/listview/filtering).
+
+* Notice the usage of a [`CompositeFilterDescriptor`](https://docs.telerik.com/blazor-ui/api/Telerik.DataSource.CompositeFilterDescriptor), instead of a [`FilterDescriptor`](https://docs.telerik.com/blazor-ui/api/Telerik.DataSource.FilterDescriptor). This is because we are searching in multiple fields with an `OR` logical operator. The [Grid Filtering documentation]({%slug components/grid/filtering%}#filter-descriptors) explains the difference between the two descriptor types.
+* Populate the `FilterDescriptors` collection of the `CompositeFilterDescriptor` object with one `FilterDescriptor` for each field that you want to search in.
+
+>caption ListView Search Textbox
+
+````CSHTML
+@* ListView SearchBox *@
+
+@using Telerik.DataSource
+@using Telerik.DataSource.Extensions
+
+
+
+
+
+
+ Clear
+
+
+
+
+ @context.Name:
+
+ @context.Description
+
+
+
+
+
+
+@code {
+ List ListViewData;
+ List SourceData;
+ string SearchString = "22";
+
+ async Task LoadListViewData(string newSearchString)
+ {
+ SearchString = newSearchString;
+
+ if (String.IsNullOrWhiteSpace(SearchString))
+ {
+ ListViewData = SourceData;
+ }
+ else
+ {
+ var request = new DataSourceRequest()
+ {
+ Filters = new List()
+ };
+
+ var cfd = new CompositeFilterDescriptor();
+
+ cfd.LogicalOperator = FilterCompositionLogicalOperator.Or;
+ cfd.FilterDescriptors.Add(new FilterDescriptor("Name", FilterOperator.Contains, SearchString));
+ cfd.FilterDescriptors.Add(new FilterDescriptor("Description", FilterOperator.Contains, SearchString));
+
+ request.Filters.Add(cfd);
+
+ ListViewData = (SourceData.ToDataSourceResult(request).Data as IEnumerable).ToList();
+ }
+ }
+
+ async Task ClearSearch()
+ {
+ SearchString = "";
+ await LoadListViewData(SearchString);
+ }
+
+ protected override async Task OnInitializedAsync()
+ {
+ SourceData = new List();
+
+ for (int i = 1; i <= 50; i++)
+ {
+
+ SourceData.Add(new Product()
+ {
+ ID = i,
+ Name = "Product " + (i * 11).ToString(),
+ Description = "Description " + (i * 22).ToString()
+ });
+ }
+
+ await LoadListViewData(SearchString);
+ }
+
+ public class Product
+ {
+ public int ID { get; set; }
+ public string Name { get; set; }
+ public string Description { get; set; }
+ }
+}
+````