Features
- Overview
- Collapsible Column Headers
- Styling Records, Groups, and Cells
- Grouping
- Filtering
- Row and Column Freezing
- Paging
- Group Panel
- Remote Data Binding
- Custom Cells
- Custom Editors
- Editing
- Batch Editing
- Sorting
- Virtual Scrolling
- Disable Server Reading
- Data Map
- Excel Export
- PDF Export
- Unobtrusive Validation
Filtering
Filtering
This sample shows how to use filtering in the MultiRow control.
Features
Id
ShippedDate
Customer.Name
Customer.Email
Customer.Phone
Shipper.Name
0
Bill Adams
Bill.Adams@gmail.com
Flash Delivery
$2,535.00
7034 Bannon St.
937-7933
flash@gmail.com
9/2/2020
9/5/2020
Hamburg
CS
84100-141
1
Tom Adams
Tom.Adams@gmail.com
Flash Delivery
$4,038.00
3908 White St.
382-6715
flash@gmail.com
4/1/2018
4/4/2018
Cairo
RS
83462-690
2
Frank Johnson
Frank.Johnson@gmail.com
Logitrax
$4,197.00
4334 Bannon St.
751-4421
logitrax@gmail.com
6/24/2020
6/26/2020
York
RS
70598-179
3
Bill Smith
Bill.Smith@gmail.com
Flash Delivery
$532.00
2506 Johnson St.
266-7198
flash@gmail.com
7/9/2025
7/10/2025
Hamburg
RN
73467-165
4
Frank Johnson
Frank.Johnson@gmail.com
Speedy Express
$3,337.00
4334 Bannon St.
751-4421
speedy@gmail.com
4/9/2021
4/12/2021
York
RS
70598-179
5
Joe Peters
Joe.Peters@gmail.com
Speedy Express
$3,261.00
5184 Peters St.
863-4930
speedy@gmail.com
11/17/2024
11/20/2024
Hamburg
RS
61160-805
6
Frank Smith
Frank.Smith@gmail.com
Speedy Express
$4,190.00
7557 Wong St.
393-2592
speedy@gmail.com
6/5/2025
6/9/2025
Paris
SP
59349-212
7
Chris Brown
Chris.Brown@gmail.com
Speedy Express
$2,009.00
4994 Richards St.
722-7421
speedy@gmail.com
5/20/2018
5/24/2018
Hamburg
RT
14470-877
8
Tony Peters
Tony.Peters@gmail.com
Speedy Express
$1,275.00
271 Wong St.
687-5430
speedy@gmail.com
10/15/2023
10/19/2023
Paris
CS
56609-229
9
John Bannon
John.Bannon@gmail.com
Flash Delivery
$3,826.00
5545 Smith St.
668-1156
flash@gmail.com
1/10/2025
1/11/2025
Sidney
SP
15893-851
10
Joe Richards
Joe.Richards@gmail.com
Logitrax
$3,284.00
4977 Richards St.
934-3677
logitrax@gmail.com
8/17/2021
8/21/2021
Cairo
RS
70981-835
11
Chris Bannon
Chris.Bannon@gmail.com
Flash Delivery
$994.00
868 White St.
919-3538
flash@gmail.com
12/13/2017
12/17/2017
Florence
RN
74872-142
12
Chris Peters
Chris.Peters@gmail.com
Flash Delivery
$3,588.00
9399 White St.
767-4891
flash@gmail.com
8/5/2023
8/9/2023
Florence
SP
85959-305
13
Tom Adams
Tom.Adams@gmail.com
Logitrax
$511.00
3908 White St.
382-6715
logitrax@gmail.com
9/7/2018
9/10/2018
Cairo
RS
83462-690
14
Mark Smith
Mark.Smith@gmail.com
Flash Delivery
$4,176.00
8729 Johnson St.
163-9914
flash@gmail.com
6/18/2025
6/22/2025
York
SC
28314-650
15
Tom Smith
Tom.Smith@gmail.com
Logitrax
$1,341.00
3848 Adams St.
450-2903
logitrax@gmail.com
6/21/2020
6/23/2020
Florence
SP
26549-460
16
Aaron Adams
Aaron.Adams@gmail.com
Logitrax
$1,371.00
7222 Wong St.
413-8418
logitrax@gmail.com
8/12/2017
8/16/2017
Paris
RT
32703-938
17
Chris Peters
Chris.Peters@gmail.com
Speedy Express
$4,525.00
9399 White St.
767-4891
speedy@gmail.com
8/14/2024
8/15/2024
Florence
SP
85959-305
18
Frank Smith
Frank.Smith@gmail.com
Logitrax
$4,270.00
3436 Wong St.
147-8973
logitrax@gmail.com
5/4/2018
5/8/2018
Florence
RS
24020-823
19
Joe Richards
Joe.Richards@gmail.com
Flash Delivery
$994.00
4977 Richards St.
934-3677
flash@gmail.com
8/25/2022
8/26/2022
Cairo
RS
70981-835
20
Aaron Adams
Aaron.Adams@gmail.com
Flash Delivery
$2,383.00
7222 Wong St.
413-8418
flash@gmail.com
2/16/2021
2/17/2021
Paris
RT
32703-938
21
Bill Adams
Bill.Adams@gmail.com
Speedy Express
$2,343.00
7034 Bannon St.
937-7933
speedy@gmail.com
6/24/2020
6/25/2020
Hamburg
CS
84100-141
22
Chris Bannon
Chris.Bannon@gmail.com
Flash Delivery
$369.00
868 White St.
919-3538
flash@gmail.com
6/23/2021
6/26/2021
Florence
RN
74872-142
23
Tom Adams
Tom.Adams@gmail.com
Flash Delivery
$1,133.00
3908 White St.
382-6715
flash@gmail.com
9/11/2022
9/14/2022
Cairo
RS
83462-690
24
Mark Smith
Mark.Smith@gmail.com
Speedy Express
$292.00
8729 Johnson St.
163-9914
speedy@gmail.com
10/8/2019
10/11/2019
York
SC
28314-650
ID
Customer
Customer Email
Shipper
Amount
Address
Phone
Shipper Email
Ordered
Shipped
City
State
Zip
Express
Settings
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | using C1.Web.Mvc.Fluent; using C1.Web.Mvc.Grid; using C1.Web.Mvc.MultiRow; using C1.Web.Mvc.MultiRow.Fluent; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MultiRowExplorer.Models { public class LayoutDefinitionsBuilders { public static Action<ListItemFactory<CellGroup, CellGroupBuilder>> OneLine { get { return ld => { ld.Add().Colspan(15).Cells(cells => { cells.Add(cell => cell.Binding( "Id" ).Header( "ID" ).CssClass( "id" )) .Add(cell => cell.Binding( "Date" ).Header( "Ordered" )) .Add(cell => cell.Binding( "ShippedDate" ).Header( "Shipped" )) .Add(cell => cell.Binding( "Amount" ).Header( "Amount" ).Format( "c" ).CssClass( "amount" )) .Add(cell => cell.Binding( "Customer.Name" ).Name( "CustomerName" ).Header( "Customer" )) .Add(cell => cell.Binding( "Customer.Address" ).Name( "CustomerAddress" ).Header( "Address" )) .Add(cell => cell.Binding( "Customer.City" ).Name( "CustomerCity" ).Header( "City" ) .DataMap(dm => { dm.DisplayMemberPath( "Value" ).SelectedValuePath( "Value" ).Bind(Orders.GetCities().ToValues()); })) .Add(cell => cell.Binding( "Customer.State" ).Name( "CustomerState" ).Header( "State" )) .Add(cell => cell.Binding( "Customer.Zip" ).Name( "CustomerZip" ).Header( "Zip" )) .Add(cell => cell.Binding( "Customer.Email" ).Name( "CustomerEmail" ).Header( "Customer Email" ).CssClass( "email" )) .Add(cell => cell.Binding( "Customer.Phone" ).Name( "Customerphone" ).Header( "Customer Phone" )) .Add(cell => cell.Binding( "Shipper.Name" ).Name( "ShipperName" ).Header( "Shipper" )) .Add(cell => cell.Binding( "Shipper.Email" ).Name( "ShipperEmail" ).Header( "Shipper Email" ).CssClass( "email" )) .Add(cell => cell.Binding( "Shipper.Phone" ).Name( "ShipperPhone" ).Header( "Shipper Phone" )) .Add(cell => cell.Binding( "Shipper.Express" ).Name( "ShipperExpress" ).Header( "Express" )); }); }; } } public static Action<ListItemFactory<CellGroup, CellGroupBuilder>> TwoLines { get { return ld => { ld.Add().Header( "Order" ).Colspan(2).Cells(cells => { cells.Add(cell => cell.Binding( "Id" ).Header( "ID" ).CssClass( "id" ).Width( "150" )) .Add(cell => cell.Binding( "Date" ).Header( "Ordered" ).Width( "150" )) .Add(cell => cell.Binding( "Amount" ).Header( "Amount" ).Format( "c" ).CssClass( "amount" )) .Add(cell => cell.Binding( "ShippedDate" ).Header( "Shipped" )); }); ld.Add().Header( "Customer" ).Colspan(3).Cells(cells => { cells.Add(cell => cell.Binding( "Customer.Name" ).Name( "CustomerName" ).Header( "Customer" ).Width( "200" )) .Add(cell => cell.Binding( "Customer.Email" ).Name( "CustomerEmail" ).Header( "Customer Email" ).Colspan(2).CssClass( "email" )) .Add(cell => cell.Binding( "Customer.Address" ).Name( "CustomerAddress" ).Header( "Address" )) .Add(cell => cell.Binding( "Customer.City" ).Name( "CustomerCity" ).Header( "City" ).ShowDropDown( true ) .DataMap(dm => { dm.DisplayMemberPath( "Value" ).SelectedValuePath( "Value" ).Bind(Orders.GetCities().ToValues()); })) .Add(cell => cell.Binding( "Customer.State" ).Name( "CustomerState" ).Header( "State" )); }); ld.Add().Header( "Shipper" ).Colspan(2).Cells(cells => { cells.Add(cell => cell.Binding( "Shipper.Name" ).Name( "ShipperName" ).Header( "Shipper" ).Colspan(2)) .Add(cell => cell.Binding( "Shipper.Email" ).Name( "ShipperEmail" ).Header( "Shipper Email" ).Width( "200" ).CssClass( "email" )) .Add(cell => cell.Binding( "Shipper.Express" ).Name( "ShipperExpress" ).Header( "Express" )); }); }; } } public static Action<ListItemFactory<CellGroup, CellGroupBuilder>> ThreeLines { get { return ld => { ld.Add().Header( "Order" ).Colspan(2).Cells(cells => { cells.Add(cell => cell.Binding( "Id" ).Header( "ID" ).Colspan(2).CssClass( "id" )) .Add(cell => cell.Binding( "Amount" ).Header( "Amount" ).Format( "c" ).Colspan(2).CssClass( "amount" )) .Add(cell => cell.Binding( "Date" ).Header( "Ordered" )) .Add(cell => cell.Binding( "ShippedDate" ).Header( "Shipped" )); }); ld.Add().Header( "Customer" ).Colspan(3).Cells(cells => { cells.Add(cell => cell.Binding( "Customer.Name" ).Name( "CustomerName" ).Header( "Customer" )) .Add(cell => cell.Binding( "Customer.Email" ).Name( "CustomerEmail" ).Header( "Customer Email" ).Colspan(2).CssClass( "email" )) .Add(cell => cell.Binding( "Customer.Address" ).Name( "CustomerAddress" ).Header( "Address" ).Colspan(2)) .Add(cell => cell.Binding( "Customer.Phone" ).Name( "CustomerPhone" ).Header( "Phone" )) .Add(cell => cell.Binding( "Customer.City" ).Name( "CustomerCity" ).Header( "City" ) .DataMap(dm => { dm.DisplayMemberPath( "Value" ).SelectedValuePath( "Value" ).Bind(Orders.GetCities().ToValues()); })) .Add(cell => cell.Binding( "Customer.State" ).Name( "CustomerState" ).Header( "State" )) .Add(cell => cell.Binding( "Customer.Zip" ).Name( "CustomerZip" ).Header( "Zip" )); }); ld.Add().Header( "Shipper" ).Cells(cells => { cells.Add(cell => cell.Binding( "Shipper.Name" ).Name( "ShipperName" ).Header( "Shipper" ).Width( "*" )) .Add(cell => cell.Binding( "Shipper.Email" ).Name( "ShipperEmail" ).Header( "Shipper Email" ).CssClass( "email" )) .Add(cell => cell.Binding( "Shipper.Express" ).Name( "ShipperExpress" ).Header( "Express" )); }); }; } } public static Action<ListItemFactory<CellGroup, CellGroupBuilder>> Sales { get { return ld => { ld.Add().Cells(cells => { cells.Add(cell => cell.Binding( "ID" ).Header( "ID" )); cells.Add(cell => cell.Binding( "Active" ).Header( "Active" )); }); ld.Add().Cells(cells => { cells.Add(cell => cell.Binding( "Start" ).Header( "Start" )); cells.Add(cell => cell.Binding( "End" ).Header( "End" )); }); ld.Add().Colspan(2).Cells(cells => { cells.Add(cell => cell.Binding( "Country" ).Header( "Country" ).Colspan(2)); cells.Add(cell => cell.Binding( "Product" ).Header( "Product" )); cells.Add(cell => cell.Binding( "Color" ).Header( "Color" )); }); ld.Add().Colspan(2).Cells(cells => { cells.Add(cell => cell.Binding( "Amount" ).Header( "Amount" )); cells.Add(cell => cell.Binding( "Amount2" ).Header( "Amount2" )); cells.Add(cell => cell.Binding( "Discount" ).Header( "Discount" ).Colspan(2)); }); }; } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | using C1.Web.Mvc; using MultiRowExplorer.Models; using System; using System.Collections.Generic; using System.Web.Mvc; using System.Linq; namespace MultiRowExplorer.Controllers { public partial class MultiRowController : Controller { private static OptionItem CreateOptionItem() { return new OptionItem { Values = new List< string > { "None" , "Condition" , "Value" , "Both" }, CurrentValue = "Both" }; } private readonly ControlOptions _filterOptions = new ControlOptions { Options = new OptionDictionary { { "CustomerState" , CreateOptionItem()}, { "CustomerCity" , CreateOptionItem()}, { "ShipperName" , CreateOptionItem()}, { "ShipperExpress" , CreateOptionItem()}, { "Amount" , CreateOptionItem()} } }; public ActionResult Filter(FormCollection data) { _filterOptions.LoadPostData(data); ViewBag.DemoOptions = _filterOptions; ViewBag.FilterTypes = GetFilterTypes(_filterOptions); return View(Orders.GetOrders()); } private Dictionary< string , FilterType> GetFilterTypes(ControlOptions controlOptions) { var filterTypes = new Dictionary< string , FilterType>(); foreach (var item in controlOptions.Options) { filterTypes.Add(item.Key, (FilterType)Enum.Parse( typeof (FilterType), item.Value.CurrentValue)); } return filterTypes; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | @model IEnumerable< Orders.Order > @ { ControlOptions optionsModel = ViewBag.DemoOptions; Dictionary< string , FilterType> filterTypes = ViewBag.FilterTypes; ViewBag.DemoSettings = true ; ViewBag.DemoDescription = false ; } @section Styles{ < style > label { display: inline-block; font-weight: normal; padding: 3px; } </ style > } @ (Html.C1().MultiRow< Orders.Order >() .Id( "filteringMultiRow" ) .Bind(Model) .PageSize(25) .IsReadOnly( true ) .LayoutDefinition(LayoutDefinitionsBuilders.ThreeLines) .SelectionMode(SelectionMode.Row) .AllowSorting( true ) .Filterable(f => f.DefaultFilterType(FilterType.Both) .ColumnFilters(cfsb => { foreach (var item in filterTypes) { cfsb.Add(cfb => cfb.Column(item.Key).FilterType(item.Value)); } }) ) .CssClass( "multirow" ) ) @ (Html.C1().Pager().Owner( "filteringMultiRow" )) @section Settings{ @Html .Partial( "_OptionsMenu" , optionsModel) } @section Summary{ This sample shows how to use filtering in the MultiRow control. } |