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
Chris Adams
Chris.Adams@gmail.com
Speedy Express
$2,125.00
9529 Richards St.
159-5650
speedy@gmail.com
2/24/2020
2/28/2020
Paris
RT
65359-162
1
Tom Brown
Tom.Brown@gmail.com
Logitrax
$2,029.00
8172 Wong St.
786-2611
logitrax@gmail.com
11/30/2018
12/1/2018
York
RN
32468-891
2
Sue Adams
Sue.Adams@gmail.com
Logitrax
$3,703.00
2946 Wong St.
907-8260
logitrax@gmail.com
9/1/2023
9/5/2023
Hamburg
CS
64687-557
3
Joe Adams
Joe.Adams@gmail.com
Speedy Express
$2,486.00
3742 Smith St.
418-4657
speedy@gmail.com
5/28/2023
5/29/2023
Rome
RS
21944-320
4
Frank Smith
Frank.Smith@gmail.com
Flash Delivery
$4,718.00
8096 Adams St.
743-9322
flash@gmail.com
5/3/2018
5/6/2018
Cairo
RN
35878-204
5
Joe Johnson
Joe.Johnson@gmail.com
Logitrax
$715.00
5431 Bannon St.
516-9575
logitrax@gmail.com
8/20/2017
8/21/2017
Paris
SP
21230-619
6
Joe Smith
Joe.Smith@gmail.com
Flash Delivery
$1,494.00
6396 Johnson St.
432-3241
flash@gmail.com
8/31/2020
9/4/2020
Hamburg
SC
29101-305
7
Tony Bannon
Tony.Bannon@gmail.com
Logitrax
$4,420.00
6721 White St.
948-5803
logitrax@gmail.com
8/5/2022
8/9/2022
York
RT
28247-994
8
Chris Bannon
Chris.Bannon@gmail.com
Logitrax
$2,192.00
3330 Wong St.
156-4169
logitrax@gmail.com
10/3/2024
10/6/2024
Florence
RN
43958-110
9
Bill Richards
Bill.Richards@gmail.com
Speedy Express
$3,316.00
9375 Richards St.
825-2419
speedy@gmail.com
12/14/2018
12/18/2018
Rome
RN
57335-235
10
Brad Richards
Brad.Richards@gmail.com
Flash Delivery
$2,548.00
4065 Bannon St.
449-9687
flash@gmail.com
6/23/2024
6/27/2024
Paris
RT
62093-357
11
John Bannon
John.Bannon@gmail.com
Speedy Express
$4,304.00
7057 Smith St.
247-5527
speedy@gmail.com
12/22/2017
12/26/2017
Florence
SC
10796-682
12
Joe Wong
Joe.Wong@gmail.com
Speedy Express
$4,352.00
1674 Smith St.
289-9323
speedy@gmail.com
11/24/2019
11/28/2019
Rome
RN
26042-794
13
John Adams
John.Adams@gmail.com
Flash Delivery
$4,717.00
1408 Brown St.
770-4781
flash@gmail.com
1/13/2023
1/16/2023
Cairo
SP
17362-943
14
Bill Richards
Bill.Richards@gmail.com
Speedy Express
$1,862.00
9375 Richards St.
825-2419
speedy@gmail.com
7/1/2022
7/2/2022
Rome
RN
57335-235
15
John Peters
John.Peters@gmail.com
Logitrax
$4,312.00
3548 Richards St.
524-1774
logitrax@gmail.com
7/31/2022
8/2/2022
Paris
RS
38812-464
16
Brad Peters
Brad.Peters@gmail.com
Flash Delivery
$1,889.00
1437 Richards St.
162-2410
flash@gmail.com
7/22/2024
7/24/2024
Paris
SP
25245-847
17
Aaron Richards
Aaron.Richards@gmail.com
Flash Delivery
$2,069.00
8198 Bannon St.
736-4645
flash@gmail.com
5/25/2019
5/27/2019
York
CS
54390-321
18
Tom Brown
Tom.Brown@gmail.com
Speedy Express
$2,326.00
8172 Wong St.
786-2611
speedy@gmail.com
3/18/2022
3/19/2022
York
RN
32468-891
19
Bill Brown
Bill.Brown@gmail.com
Flash Delivery
$736.00
6207 Adams St.
689-2392
flash@gmail.com
5/26/2024
5/29/2024
Paris
CS
28933-747
20
Bill Peters
Bill.Peters@gmail.com
Logitrax
$4,548.00
7469 Brown St.
841-2510
logitrax@gmail.com
12/22/2023
12/26/2023
Sidney
RT
39269-889
21
Chris White
Chris.White@gmail.com
Speedy Express
$3,702.00
5026 Bannon St.
348-1828
speedy@gmail.com
6/11/2017
6/13/2017
Sidney
RT
71060-337
22
John Peters
John.Peters@gmail.com
Logitrax
$1,093.00
5248 White St.
114-6580
logitrax@gmail.com
7/9/2020
7/10/2020
Cairo
SC
78505-905
23
Brad Smith
Brad.Smith@gmail.com
Flash Delivery
$2,730.00
8640 Wong St.
131-5424
flash@gmail.com
9/19/2023
9/22/2023
Florence
SP
32132-669
24
Tony Bannon
Tony.Bannon@gmail.com
Logitrax
$3,880.00
6721 White St.
948-5803
logitrax@gmail.com
4/19/2018
4/20/2018
York
RT
28247-994
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. } |