Skip to content

Extras

DataGrid

Bit.BlazorUI.Extras

BitDataGrid displays an information-rich data table and gives people the tools to work through it: sorting, quick search and per-column filters, paging, grouping with aggregates, selection, inline editing, resizable/reorderable/frozen columns, master-detail and tree rows, keyboard cell navigation, row and column virtualization, and CSV/Excel export. Bind a list, an IQueryable executed at the source, or a callback for server-side paging or infinite scrolling. Use a data grid when information density is critical.

Notes

To use this component, you need to install the Bit.BlazorUI.Extras(opens in a new tab) NuGet package, as described in the Optional steps of the Getting started page.

Usage

Every example is live. Open its code to see exactly what produced the component running underneath.

Basic & sorting

Bind Items and declare the columns; Property binds a column with a typed selector. A header click sorts ascending, descending, then unsorted (AllowUnsorted="false" drops the last step), and Ctrl/⌘ or Shift+click adds a column to the sort. AriaLabel names the grid for screen readers - or AriaLabelledBy, pointing at a visible heading.

1
Vintage Gadget 212
Home
$171.75
131
3.9
2
Eco Notebook 554
Clothing
$382.16
130
3.1
3
Classic Gadget 181
Toys
$813.02
269
1.2
4
Vintage Blender 267
Electronics
$310.12
291
4.3
5
Vintage Jacket 234
Electronics
$55.50
390
3.5
6
Smart Drone 229
Electronics
$603.51
257
1.2
7
Eco Widget 428
Books
$72.97
359
1.3
8
Pro Blender 549
Electronics
$825.55
6
1.0
9
Deluxe Mug 514
Clothing
$615.44
22
2.5
10
Mini Jacket 367
Grocery
$585.87
367
1.1
11
Vintage Gadget 192
Home
$334.92
388
1.6
12
Mini Mug 788
Toys
$712.80
144
3.2
13
Classic Mug 124
Books
$267.79
19
1.9
14
Compact Gadget 195
Clothing
$325.60
375
4.3
15
Deluxe Speaker 932
Sports
$281.65
272
3.5
16
Eco Widget 307
Grocery
$982.55
390
1.5
17
Mini Blender 740
Electronics
$597.20
195
4.5
18
Pro Blender 952
Sports
$132.04
53
1.0
19
Classic Drone 459
Electronics
$906.58
481
4.6
20
Mega Mug 839
Sports
$282.70
169
3.1
21
Mega Speaker 349
Books
$830.28
320
1.3
22
Modern Mug 947
Home
$886.86
484
1.6
23
Mini Backpack 199
Sports
$349.39
260
3.9
24
Mini Speaker 940
Electronics
$60.13
107
2.3
25
Deluxe Lamp 430
Home
$760.77
331
5.0
26
Eco Mug 633
Toys
$388.23
478
1.3
27
Compact Camera 900
Electronics
$300.37
290
1.1
28
Mega Mug 366
Grocery
$749.69
15
2.4
29
Mini Jacket 409
Books
$604.08
321
3.4
30
Premium Camera 361
Grocery
$352.80
0
3.3
31
Mega Gadget 949
Books
$654.24
99
3.6
32
Mega Lamp 485
Books
$787.62
277
3.2
33
Compact Backpack 302
Clothing
$540.00
406
3.8
34
Pro Mug 551
Grocery
$45.94
206
2.7
35
Ultra Mug 514
Clothing
$484.40
357
2.7
36
Pro Camera 944
Home
$211.34
473
4.5
37
Mini Notebook 156
Electronics
$900.67
312
4.7
38
Premium Jacket 198
Electronics
$651.34
10
1.9
39
Classic Drone 215
Sports
$290.56
272
1.2
40
Mini Sneaker 570
Sports
$897.23
338
4.6
41
Modern Camera 946
Sports
$661.07
44
4.2
42
Vintage Mug 824
Sports
$444.42
453
1.8
43
Mini Mug 925
Electronics
$843.33
173
4.4
44
Premium Camera 560
Grocery
$35.33
277
3.6
45
Vintage Gadget 237
Home
$383.48
282
4.9
46
Pro Drone 577
Electronics
$285.56
438
4.7
47
Eco Jacket 846
Grocery
$59.26
414
2.8
48
Smart Camera 226
Toys
$612.62
229
4.1
49
Classic Gadget 202
Electronics
$494.25
256
2.4
50
Mega Sneaker 417
Sports
$955.45
169
2.1

Filtering & paging

Filterable adds a filter row whose editor follows each column's type and filters as you type (FilterDebounce). FilterOperators adds an operator picker (including Is blank, and Is any of taking a comma-separated list), which a column can opt out of. A column's FilterTemplate replaces its editor - here a multi-select applying In. Pageable pages the rows, and ShowToolbar shows Clear filters while a filter is on. These columns bind by Field name.

1
Vintage Gadget 212
Home
Wayne Enterprises
$171.75
2023-01-19
2
Eco Notebook 554
Clothing
Soylent
$382.16
2019-07-18
3
Classic Gadget 181
Toys
Wonka Inc
$813.02
2023-03-12
4
Vintage Blender 267
Electronics
Wayne Enterprises
$310.12
2021-01-25
5
Vintage Jacket 234
Electronics
Wayne Enterprises
$55.50
2022-08-20
6
Smart Drone 229
Electronics
Stark Industries
$603.51
2020-02-18
7
Eco Widget 428
Books
Wayne Enterprises
$72.97
2023-12-08
8
Pro Blender 549
Electronics
Acme Corp
$825.55
2020-06-02
9
Deluxe Mug 514
Clothing
Wayne Enterprises
$615.44
2021-08-11
10
Mini Jacket 367
Grocery
Initech
$585.87
2018-10-04
1–10 of 200
Page 1 of 20

Quick search

ShowSearchBox searches every column at once, matching the text each cell shows; Searchable="false" leaves a column out. SearchText is two-way bindable, and SearchDebounce (300 ms) turns a burst of typing into one search.

1
Vintage Gadget 212
Home
Wayne Enterprises
$171.75
131
2
Eco Notebook 554
Clothing
Soylent
$382.16
130
3
Classic Gadget 181
Toys
Wonka Inc
$813.02
269
4
Vintage Blender 267
Electronics
Wayne Enterprises
$310.12
291
5
Vintage Jacket 234
Electronics
Wayne Enterprises
$55.50
390
6
Smart Drone 229
Electronics
Stark Industries
$603.51
257
7
Eco Widget 428
Books
Wayne Enterprises
$72.97
359
8
Pro Blender 549
Electronics
Acme Corp
$825.55
6
9
Deluxe Mug 514
Clothing
Wayne Enterprises
$615.44
22
10
Mini Jacket 367
Grocery
Initech
$585.87
367
1–10 of 200
Page 1 of 20

No search term.

Selection

SelectionMode picks a row click (Single, which makes the cells navigable so Space selects too) or checkboxes with a select-all box (Multiple); Shift+click selects a range. SelectedItems is two-way bindable and tracked by KeyField, and IsRowSelectionDisabled locks rows out - discontinued products here. RowHeader makes Name the header of its row: screen readers announce it from row to row, and it names each checkbox.

0 selected

1
Vintage Gadget 212
Home
$171.75
False
2
Eco Notebook 554
Clothing
$382.16
True
3
Classic Gadget 181
Toys
$813.02
False
4
Vintage Blender 267
Electronics
$310.12
True
5
Vintage Jacket 234
Electronics
$55.50
True
6
Smart Drone 229
Electronics
$603.51
False
7
Eco Widget 428
Books
$72.97
False
8
Pro Blender 549
Electronics
$825.55
True
9
Deluxe Mug 514
Clothing
$615.44
True
10
Mini Jacket 367
Grocery
$585.87
False
1–10 of 60
Page 1 of 6

Keyboard & clipboard

CellNavigation makes the cells a single tab stop (the APG grid pattern): the arrows, Home/End, Ctrl+Home/End and Page Up/Down move between them, Space toggles the row, Shift+Space extends the range and Ctrl+A selects every row - so the row checkboxes leave the tab order. With ClipboardCopy, Ctrl/⌘+C copies the selected rows as tab-separated text that pastes into Excel as columns.

Select rows, then copy them.

1
Vintage Gadget 212
Home
$171.75
131
2
Eco Notebook 554
Clothing
$382.16
130
3
Classic Gadget 181
Toys
$813.02
269
4
Vintage Blender 267
Electronics
$310.12
291
5
Vintage Jacket 234
Electronics
$55.50
390
6
Smart Drone 229
Electronics
$603.51
257
7
Eco Widget 428
Books
$72.97
359
8
Pro Blender 549
Electronics
$825.55
6
9
Deluxe Mug 514
Clothing
$615.44
22
10
Mini Jacket 367
Grocery
$585.87
367
11
Vintage Gadget 192
Home
$334.92
388
12
Mini Mug 788
Toys
$712.80
144
13
Classic Mug 124
Books
$267.79
19
14
Compact Gadget 195
Clothing
$325.60
375
15
Deluxe Speaker 932
Sports
$281.65
272
16
Eco Widget 307
Grocery
$982.55
390
17
Mini Blender 740
Electronics
$597.20
195
18
Pro Blender 952
Sports
$132.04
53
19
Classic Drone 459
Electronics
$906.58
481
20
Mega Mug 839
Sports
$282.70
169
21
Mega Speaker 349
Books
$830.28
320
22
Modern Mug 947
Home
$886.86
484
23
Mini Backpack 199
Sports
$349.39
260
24
Mini Speaker 940
Electronics
$60.13
107
25
Deluxe Lamp 430
Home
$760.77
331
26
Eco Mug 633
Toys
$388.23
478
27
Compact Camera 900
Electronics
$300.37
290
28
Mega Mug 366
Grocery
$749.69
15
29
Mini Jacket 409
Books
$604.08
321
30
Premium Camera 361
Grocery
$352.80
0
31
Mega Gadget 949
Books
$654.24
99
32
Mega Lamp 485
Books
$787.62
277
33
Compact Backpack 302
Clothing
$540.00
406
34
Pro Mug 551
Grocery
$45.94
206
35
Ultra Mug 514
Clothing
$484.40
357
36
Pro Camera 944
Home
$211.34
473
37
Mini Notebook 156
Electronics
$900.67
312
38
Premium Jacket 198
Electronics
$651.34
10
39
Classic Drone 215
Sports
$290.56
272
40
Mini Sneaker 570
Sports
$897.23
338

Inline editing

Editable adds a command column and NewItemFactory an Add button. Editors follow each column's type, edits are buffered until saved, and Validate blocks an invalid value (clear a name, or enter a negative price). EditMode edits the whole row (Save/Cancel) or one cell at a time: Enter, F2 or a double-click opens it, and typing into a text or number cell opens it with what you type; Enter, Tab or leaving it saves; Esc cancels; Delete removes the focused row. A row double-click here calls BeginEdit via OnRowDoubleClick.


Actions
1
Vintage Gadget 212
Home
$171.75
131
2023-01-19
False
2
Eco Notebook 554
Clothing
$382.16
130
2019-07-18
True
3
Classic Gadget 181
Toys
$813.02
269
2023-03-12
False
4
Vintage Blender 267
Electronics
$310.12
291
2021-01-25
True
5
Vintage Jacket 234
Electronics
$55.50
390
2022-08-20
True
6
Smart Drone 229
Electronics
$603.51
257
2020-02-18
False
7
Eco Widget 428
Books
$72.97
359
2023-12-08
False
8
Pro Blender 549
Electronics
$825.55
6
2020-06-02
True
9
Deluxe Mug 514
Clothing
$615.44
22
2021-08-11
True
10
Mini Jacket 367
Grocery
$585.87
367
2018-10-04
False
1–10 of 25
Page 1 of 3

Double-click a row, or use its Edit button.

Grouping & aggregates

Groupable adds a ⊞ toggle to the headers; group by Category, then Supplier, for nested groups. Each group shows its columns' Aggregate, ShowFooter shows the grand totals, and AggregateBy computes a custom one. GroupsInitiallyCollapsed opens the groups closed; ExpandAllGroupsAsync / CollapseAllGroupsAsync flip them all.


1
Vintage Gadget 212
Home
Wayne Enterprises
$171.75
131
3.9
2
Eco Notebook 554
Clothing
Soylent
$382.16
130
3.1
3
Classic Gadget 181
Toys
Wonka Inc
$813.02
269
1.2
4
Vintage Blender 267
Electronics
Wayne Enterprises
$310.12
291
4.3
5
Vintage Jacket 234
Electronics
Wayne Enterprises
$55.50
390
3.5
6
Smart Drone 229
Electronics
Stark Industries
$603.51
257
1.2
7
Eco Widget 428
Books
Wayne Enterprises
$72.97
359
1.3
8
Pro Blender 549
Electronics
Acme Corp
$825.55
6
1.0
9
Deluxe Mug 514
Clothing
Wayne Enterprises
$615.44
22
2.5
10
Mini Jacket 367
Grocery
Initech
$585.87
367
1.1
11
Vintage Gadget 192
Home
Soylent
$334.92
388
1.6
12
Mini Mug 788
Toys
Acme Corp
$712.80
144
3.2
13
Classic Mug 124
Books
Acme Corp
$267.79
19
1.9
14
Compact Gadget 195
Clothing
Wayne Enterprises
$325.60
375
4.3
15
Deluxe Speaker 932
Sports
Initech
$281.65
272
3.5
16
Eco Widget 307
Grocery
Initech
$982.55
390
1.5
17
Mini Blender 740
Electronics
Wonka Inc
$597.20
195
4.5
18
Pro Blender 952
Sports
Stark Industries
$132.04
53
1.0
19
Classic Drone 459
Electronics
Soylent
$906.58
481
4.6
20
Mega Mug 839
Sports
Wonka Inc
$282.70
169
3.1
21
Mega Speaker 349
Books
Wonka Inc
$830.28
320
1.3
22
Modern Mug 947
Home
Stark Industries
$886.86
484
1.6
23
Mini Backpack 199
Sports
Wayne Enterprises
$349.39
260
3.9
24
Mini Speaker 940
Electronics
Initech
$60.13
107
2.3
25
Deluxe Lamp 430
Home
Initech
$760.77
331
5.0
26
Eco Mug 633
Toys
Initech
$388.23
478
1.3
27
Compact Camera 900
Electronics
Stark Industries
$300.37
290
1.1
28
Mega Mug 366
Grocery
Stark Industries
$749.69
15
2.4
29
Mini Jacket 409
Books
Acme Corp
$604.08
321
3.4
30
Premium Camera 361
Grocery
Globex
$352.80
0
3.3
31
Mega Gadget 949
Books
Initech
$654.24
99
3.6
32
Mega Lamp 485
Books
Stark Industries
$787.62
277
3.2
33
Compact Backpack 302
Clothing
Wayne Enterprises
$540.00
406
3.8
34
Pro Mug 551
Grocery
Umbrella
$45.94
206
2.7
35
Ultra Mug 514
Clothing
Wayne Enterprises
$484.40
357
2.7
36
Pro Camera 944
Home
Wayne Enterprises
$211.34
473
4.5
37
Mini Notebook 156
Electronics
Umbrella
$900.67
312
4.7
38
Premium Jacket 198
Electronics
Wayne Enterprises
$651.34
10
1.9
39
Classic Drone 215
Sports
Acme Corp
$290.56
272
1.2
40
Mini Sneaker 570
Sports
Wayne Enterprises
$897.23
338
4.6
41
Modern Camera 946
Sports
Globex
$661.07
44
4.2
42
Vintage Mug 824
Sports
Initech
$444.42
453
1.8
43
Mini Mug 925
Electronics
Wonka Inc
$843.33
173
4.4
44
Premium Camera 560
Grocery
Globex
$35.33
277
3.6
45
Vintage Gadget 237
Home
Wonka Inc
$383.48
282
4.9
46
Pro Drone 577
Electronics
Initech
$285.56
438
4.7
47
Eco Jacket 846
Grocery
Wonka Inc
$59.26
414
2.8
48
Smart Camera 226
Toys
Initech
$612.62
229
4.1
49
Classic Gadget 202
Electronics
Globex
$494.25
256
2.4
50
Mega Sneaker 417
Sports
Soylent
$955.45
169
2.1
51
Premium Gadget 932
Clothing
Wayne Enterprises
$741.93
301
2.9
52
Premium Lamp 283
Toys
Soylent
$943.60
49
2.2
53
Pro Mug 237
Toys
Initech
$264.98
237
3.1
54
Eco Lamp 139
Electronics
Wonka Inc
$175.86
112
1.9
55
Ultra Lamp 134
Grocery
Wayne Enterprises
$47.06
77
3.3
56
Ultra Blender 911
Grocery
Initech
$80.83
62
5.0
57
Ultra Gadget 323
Books
Stark Industries
$647.39
313
2.7
58
Deluxe Blender 420
Home
Acme Corp
$506.54
17
4.8
59
Deluxe Camera 513
Sports
Acme Corp
$234.18
305
3.3
60
Eco Mug 642
Electronics
Umbrella
$809.15
442
1.8
61
Vintage Lamp 246
Books
Acme Corp
$971.43
238
1.8
62
Eco Backpack 738
Electronics
Acme Corp
$366.59
112
3.8
63
Ultra Notebook 129
Home
Soylent
$488.57
483
4.9
64
Deluxe Widget 171
Books
Wayne Enterprises
$384.18
206
3.8
65
Classic Gadget 833
Electronics
Soylent
$866.59
268
1.8
66
Eco Backpack 963
Books
Acme Corp
$371.05
236
2.8
67
Mini Mug 765
Sports
Wonka Inc
$200.57
57
3.5
68
Mini Jacket 661
Books
Wonka Inc
$632.20
439
2.7
69
Modern Jacket 576
Electronics
Wonka Inc
$429.20
49
1.4
70
Compact Mug 696
Sports
Wayne Enterprises
$244.82
228
2.7
71
Compact Backpack 959
Sports
Umbrella
$57.23
410
1.5
72
Ultra Lamp 199
Toys
Acme Corp
$249.92
68
2.7
73
Ultra Backpack 762
Sports
Globex
$991.34
272
3.8
74
Pro Jacket 295
Sports
Soylent
$37.91
45
2.7
75
Compact Notebook 426
Clothing
Acme Corp
$869.12
262
4.5
76
Ultra Sneaker 789
Toys
Soylent
$743.04
101
4.7
77
Premium Notebook 878
Clothing
Globex
$39.85
338
1.9
78
Vintage Drone 655
Toys
Umbrella
$121.29
349
2.4
79
Mega Backpack 316
Sports
Wayne Enterprises
$138.33
341
3.4
80
Premium Speaker 971
Home
Globex
$496.89
335
2.8

Templates

Template, HeaderTemplate and FooterTemplate render any markup. A template-only column sorts by its SortBy key, and Comparer replaces the ordering itself - Stock sorts in-stock rows first.

Vintage Gadget 212
Home
★★★★★
$171.75
131 in stock
$22,499
Eco Notebook 554
Clothing
★★★★★
$382.16
130 in stock
$49,681
Classic Gadget 181
Toys
★★★★★
$813.02
269 in stock
$218,702
Vintage Blender 267
Electronics
★★★★★
$310.12
291 in stock
$90,245
Vintage Jacket 234
Electronics
★★★★★
$55.50
390 in stock
$21,645
Smart Drone 229
Electronics
★★★★★
$603.51
257 in stock
$155,102
Eco Widget 428
Books
★★★★★
$72.97
359 in stock
$26,196
Pro Blender 549
Electronics
★★★★★
$825.55
6 in stock
$4,953
Deluxe Mug 514
Clothing
★★★★★
$615.44
22 in stock
$13,540
Mini Jacket 367
Grocery
★★★★★
$585.87
367 in stock
$215,014
Vintage Gadget 192
Home
★★★★★
$334.92
388 in stock
$129,949
Mini Mug 788
Toys
★★★★★
$712.80
144 in stock
$102,643
Classic Mug 124
Books
★★★★★
$267.79
19 in stock
$5,088
Compact Gadget 195
Clothing
★★★★★
$325.60
375 in stock
$122,100
Deluxe Speaker 932
Sports
★★★★★
$281.65
272 in stock
$76,609
Eco Widget 307
Grocery
★★★★★
$982.55
390 in stock
$383,195
Mini Blender 740
Electronics
★★★★★
$597.20
195 in stock
$116,454
Pro Blender 952
Sports
★★★★★
$132.04
53 in stock
$6,998
Classic Drone 459
Electronics
★★★★★
$906.58
481 in stock
$436,065
Mega Mug 839
Sports
★★★★★
$282.70
169 in stock
$47,776
Mega Speaker 349
Books
★★★★★
$830.28
320 in stock
$265,690
Modern Mug 947
Home
★★★★★
$886.86
484 in stock
$429,240
Mini Backpack 199
Sports
★★★★★
$349.39
260 in stock
$90,841
Mini Speaker 940
Electronics
★★★★★
$60.13
107 in stock
$6,434
Deluxe Lamp 430
Home
★★★★★
$760.77
331 in stock
$251,815
Eco Mug 633
Toys
★★★★★
$388.23
478 in stock
$185,574
Compact Camera 900
Electronics
★★★★★
$300.37
290 in stock
$87,107
Mega Mug 366
Grocery
★★★★★
$749.69
15 in stock
$11,245
Mini Jacket 409
Books
★★★★★
$604.08
321 in stock
$193,910
Premium Camera 361
Grocery
★★★★★
$352.80
Out of stock
$0

Detail rows

DetailTemplate renders anything under a row - here a nested grid. A row opens from its ▸ toggle, from a click on the row (ExpandDetailOnRowClick) or from code; ShowDetailToggle="false" hides the toggle column, ExpandedDetailItems is bindable and OnDetailToggle reports each change.

Click a row, or its ▸ toggle, to open it.

Details

Column layout

Resizable: drag a header's edge, double-click it to fit the content, or focus it and use the arrow keys (Home/End go to MinWidth/MaxWidth, Enter fits). Reorderable: drag a header, press Ctrl+←/→ on it, or use the arrows in the ShowColumnChooser panel, which also hides columns. Dragging works with touch and pen too. Frozen and FrozenEnd pin columns to an edge, and Group banners adjacent columns under one header.

Identity
Commercials
1
Vintage Gadget 212
Home
Wayne Enterprises
$171.75
131
2023-01-19
3.9
2
Eco Notebook 554
Clothing
Soylent
$382.16
130
2019-07-18
3.1
3
Classic Gadget 181
Toys
Wonka Inc
$813.02
269
2023-03-12
1.2
4
Vintage Blender 267
Electronics
Wayne Enterprises
$310.12
291
2021-01-25
4.3
5
Vintage Jacket 234
Electronics
Wayne Enterprises
$55.50
390
2022-08-20
3.5
6
Smart Drone 229
Electronics
Stark Industries
$603.51
257
2020-02-18
1.2
7
Eco Widget 428
Books
Wayne Enterprises
$72.97
359
2023-12-08
1.3
8
Pro Blender 549
Electronics
Acme Corp
$825.55
6
2020-06-02
1.0
9
Deluxe Mug 514
Clothing
Wayne Enterprises
$615.44
22
2021-08-11
2.5
10
Mini Jacket 367
Grocery
Initech
$585.87
367
2018-10-04
1.1
11
Vintage Gadget 192
Home
Soylent
$334.92
388
2022-10-27
1.6
12
Mini Mug 788
Toys
Acme Corp
$712.80
144
2020-06-09
3.2
13
Classic Mug 124
Books
Acme Corp
$267.79
19
2021-09-09
1.9
14
Compact Gadget 195
Clothing
Wayne Enterprises
$325.60
375
2023-10-09
4.3
15
Deluxe Speaker 932
Sports
Initech
$281.65
272
2022-12-13
3.5
16
Eco Widget 307
Grocery
Initech
$982.55
390
2022-12-24
1.5
17
Mini Blender 740
Electronics
Wonka Inc
$597.20
195
2022-02-04
4.5
18
Pro Blender 952
Sports
Stark Industries
$132.04
53
2018-11-08
1.0
19
Classic Drone 459
Electronics
Soylent
$906.58
481
2022-03-05
4.6
20
Mega Mug 839
Sports
Wonka Inc
$282.70
169
2022-08-25
3.1
21
Mega Speaker 349
Books
Wonka Inc
$830.28
320
2019-08-05
1.3
22
Modern Mug 947
Home
Stark Industries
$886.86
484
2022-11-05
1.6
23
Mini Backpack 199
Sports
Wayne Enterprises
$349.39
260
2021-02-06
3.9
24
Mini Speaker 940
Electronics
Initech
$60.13
107
2022-05-29
2.3
25
Deluxe Lamp 430
Home
Initech
$760.77
331
2019-04-24
5.0
26
Eco Mug 633
Toys
Initech
$388.23
478
2019-03-07
1.3
27
Compact Camera 900
Electronics
Stark Industries
$300.37
290
2021-10-02
1.1
28
Mega Mug 366
Grocery
Stark Industries
$749.69
15
2023-10-08
2.4
29
Mini Jacket 409
Books
Acme Corp
$604.08
321
2020-05-11
3.4
30
Premium Camera 361
Grocery
Globex
$352.80
0
2023-02-25
3.3
31
Mega Gadget 949
Books
Initech
$654.24
99
2019-04-16
3.6
32
Mega Lamp 485
Books
Stark Industries
$787.62
277
2021-10-01
3.2
33
Compact Backpack 302
Clothing
Wayne Enterprises
$540.00
406
2020-10-10
3.8
34
Pro Mug 551
Grocery
Umbrella
$45.94
206
2020-12-02
2.7
35
Ultra Mug 514
Clothing
Wayne Enterprises
$484.40
357
2022-12-21
2.7
36
Pro Camera 944
Home
Wayne Enterprises
$211.34
473
2020-07-01
4.5
37
Mini Notebook 156
Electronics
Umbrella
$900.67
312
2023-02-28
4.7
38
Premium Jacket 198
Electronics
Wayne Enterprises
$651.34
10
2019-06-22
1.9
39
Classic Drone 215
Sports
Acme Corp
$290.56
272
2020-06-08
1.2
40
Mini Sneaker 570
Sports
Wayne Enterprises
$897.23
338
2021-10-15
4.6

Column spanning

ColSpan lets a cell cover the next columns of its row: a discontinued product's name spans Category, and a premium price spans Stock. Assistive technologies get the span through aria-colspan.

1
Vintage Gadget 212
Home
$171.75
131
2
⚠ Eco Notebook 554 - discontinued
$382.16
130
3
Classic Gadget 181
Toys
★ Premium: $813.02 · 269 in stock
4
⚠ Vintage Blender 267 - discontinued
$310.12
291
5
⚠ Vintage Jacket 234 - discontinued
$55.50
390
6
Smart Drone 229
Electronics
$603.51
257
7
Eco Widget 428
Books
$72.97
359
8
⚠ Pro Blender 549 - discontinued
★ Premium: $825.55 · 6 in stock
9
⚠ Deluxe Mug 514 - discontinued
$615.44
22
10
Mini Jacket 367
Grocery
$585.87
367
11
⚠ Vintage Gadget 192 - discontinued
$334.92
388
12
Mini Mug 788
Toys
$712.80
144
13
Classic Mug 124
Books
$267.79
19
14
⚠ Compact Gadget 195 - discontinued
$325.60
375
15
Deluxe Speaker 932
Sports
$281.65
272
16
Eco Widget 307
Grocery
★ Premium: $982.55 · 390 in stock
17
Mini Blender 740
Electronics
$597.20
195
18
⚠ Pro Blender 952 - discontinued
$132.04
53
19
⚠ Classic Drone 459 - discontinued
★ Premium: $906.58 · 481 in stock
20
Mega Mug 839
Sports
$282.70
169
21
Mega Speaker 349
Books
★ Premium: $830.28 · 320 in stock
22
Modern Mug 947
Home
★ Premium: $886.86 · 484 in stock
23
Mini Backpack 199
Sports
$349.39
260
24
⚠ Mini Speaker 940 - discontinued
$60.13
107
25
Deluxe Lamp 430
Home
$760.77
331
26
Eco Mug 633
Toys
$388.23
478
27
Compact Camera 900
Electronics
$300.37
290
28
Mega Mug 366
Grocery
$749.69
15
29
Mini Jacket 409
Books
$604.08
321
30
Premium Camera 361
Grocery
$352.80
0
31
Mega Gadget 949
Books
$654.24
99
32
Mega Lamp 485
Books
$787.62
277
33
Compact Backpack 302
Clothing
$540.00
406
34
⚠ Pro Mug 551 - discontinued
$45.94
206
35
⚠ Ultra Mug 514 - discontinued
$484.40
357
36
Pro Camera 944
Home
$211.34
473
37
Mini Notebook 156
Electronics
★ Premium: $900.67 · 312 in stock
38
Premium Jacket 198
Electronics
$651.34
10
39
⚠ Classic Drone 215 - discontinued
$290.56
272
40
Mini Sneaker 570
Sports
★ Premium: $897.23 · 338 in stock

Borders, striping & row numbers

Bordered, Striped and Hoverable are on by default. ShowRowNumbers numbers the rows by their place in the whole data set - page 2 starts at 9 - and is never exported.


1
1
Vintage Gadget 212
Home
$171.75
131
2
2
Eco Notebook 554
Clothing
$382.16
130
3
3
Classic Gadget 181
Toys
$813.02
269
4
4
Vintage Blender 267
Electronics
$310.12
291
5
5
Vintage Jacket 234
Electronics
$55.50
390
6
6
Smart Drone 229
Electronics
$603.51
257
7
7
Eco Widget 428
Books
$72.97
359
8
8
Pro Blender 549
Electronics
$825.55
6
1–8 of 60
Page 1 of 8

Row & cell styling

RowClass and RowStyle style a row from its data - out-of-stock rows turn red, premium ones bold; a column's CellClassSelector and CellStyleSelector do the same for its own cells - low stock in amber. ShowCellTooltips gives every cell its full text as a tooltip (a column opts out with ShowTooltip="false"): narrow the Name column and hover a name.

1
Vintage Gadget 212
Wayne Enterprises
Home
$171.75
131
2
Eco Notebook 554
Soylent
Clothing
$382.16
130
3
Classic Gadget 181
Wonka Inc
Toys
$813.02
269
4
Vintage Blender 267
Wayne Enterprises
Electronics
$310.12
291
5
Vintage Jacket 234
Wayne Enterprises
Electronics
$55.50
390
6
Smart Drone 229
Stark Industries
Electronics
$603.51
257
7
Eco Widget 428
Wayne Enterprises
Books
$72.97
359
8
Pro Blender 549
Acme Corp
Electronics
$825.55
6
9
Deluxe Mug 514
Wayne Enterprises
Clothing
$615.44
22
10
Mini Jacket 367
Initech
Grocery
$585.87
367
11
Vintage Gadget 192
Soylent
Home
$334.92
388
12
Mini Mug 788
Acme Corp
Toys
$712.80
144
13
Classic Mug 124
Acme Corp
Books
$267.79
19
14
Compact Gadget 195
Wayne Enterprises
Clothing
$325.60
375
15
Deluxe Speaker 932
Initech
Sports
$281.65
272
16
Eco Widget 307
Initech
Grocery
$982.55
390
17
Mini Blender 740
Wonka Inc
Electronics
$597.20
195
18
Pro Blender 952
Stark Industries
Sports
$132.04
53
19
Classic Drone 459
Soylent
Electronics
$906.58
481
20
Mega Mug 839
Wonka Inc
Sports
$282.70
169
21
Mega Speaker 349
Wonka Inc
Books
$830.28
320
22
Modern Mug 947
Stark Industries
Home
$886.86
484
23
Mini Backpack 199
Wayne Enterprises
Sports
$349.39
260
24
Mini Speaker 940
Initech
Electronics
$60.13
107
25
Deluxe Lamp 430
Initech
Home
$760.77
331
26
Eco Mug 633
Initech
Toys
$388.23
478
27
Compact Camera 900
Stark Industries
Electronics
$300.37
290
28
Mega Mug 366
Stark Industries
Grocery
$749.69
15
29
Mini Jacket 409
Acme Corp
Books
$604.08
321
30
Premium Camera 361
Globex
Grocery
$352.80
0
31
Mega Gadget 949
Initech
Books
$654.24
99
32
Mega Lamp 485
Stark Industries
Books
$787.62
277
33
Compact Backpack 302
Wayne Enterprises
Clothing
$540.00
406
34
Pro Mug 551
Umbrella
Grocery
$45.94
206
35
Ultra Mug 514
Wayne Enterprises
Clothing
$484.40
357
36
Pro Camera 944
Wayne Enterprises
Home
$211.34
473
37
Mini Notebook 156
Umbrella
Electronics
$900.67
312
38
Premium Jacket 198
Wayne Enterprises
Electronics
$651.34
10
39
Classic Drone 215
Acme Corp
Sports
$290.56
272
40
Mini Sneaker 570
Wayne Enterprises
Sports
$897.23
338
41
Modern Camera 946
Globex
Sports
$661.07
44
42
Vintage Mug 824
Initech
Sports
$444.42
453
43
Mini Mug 925
Wonka Inc
Electronics
$843.33
173
44
Premium Camera 560
Globex
Grocery
$35.33
277
45
Vintage Gadget 237
Wonka Inc
Home
$383.48
282
46
Pro Drone 577
Initech
Electronics
$285.56
438
47
Eco Jacket 846
Wonka Inc
Grocery
$59.26
414
48
Smart Camera 226
Initech
Toys
$612.62
229
49
Classic Gadget 202
Globex
Electronics
$494.25
256
50
Mega Sneaker 417
Soylent
Sports
$955.45
169
51
Premium Gadget 932
Wayne Enterprises
Clothing
$741.93
301
52
Premium Lamp 283
Soylent
Toys
$943.60
49
53
Pro Mug 237
Initech
Toys
$264.98
237
54
Eco Lamp 139
Wonka Inc
Electronics
$175.86
112
55
Ultra Lamp 134
Wayne Enterprises
Grocery
$47.06
77
56
Ultra Blender 911
Initech
Grocery
$80.83
62
57
Ultra Gadget 323
Stark Industries
Books
$647.39
313
58
Deluxe Blender 420
Acme Corp
Home
$506.54
17
59
Deluxe Camera 513
Acme Corp
Sports
$234.18
305
60
Eco Mug 642
Umbrella
Electronics
$809.15
442

Text wrapping & row height

WrapCellText wraps long values (and headers) instead of cutting them off, and the row grows to fit; a column overrides it with WrapText. RowHeight (36) is every row's minimum height, and RowHeightSelector sets it per row - premium products here. Wrapping is off while Virtualize is on, which needs every row at exactly RowHeight.



Description
1
Vintage Gadget 212
Vintage Gadget 212 is a home product supplied by Wayne Enterprises, released on 1/19/2023 and currently rated 3.9 out of 5 by our customers.
$171.75
131
2
Eco Notebook 554
Eco Notebook 554 is a clothing product supplied by Soylent, released on 7/18/2019 and currently rated 3.1 out of 5 by our customers.
$382.16
130
3
Classic Gadget 181
Classic Gadget 181 is a toys product supplied by Wonka Inc, released on 3/12/2023 and currently rated 1.2 out of 5 by our customers.
$813.02
269
4
Vintage Blender 267
Vintage Blender 267 is a electronics product supplied by Wayne Enterprises, released on 1/25/2021 and currently rated 4.3 out of 5 by our customers.
$310.12
291
5
Vintage Jacket 234
Vintage Jacket 234 is a electronics product supplied by Wayne Enterprises, released on 8/20/2022 and currently rated 3.5 out of 5 by our customers.
$55.50
390
6
Smart Drone 229
Smart Drone 229 is a electronics product supplied by Stark Industries, released on 2/18/2020 and currently rated 1.2 out of 5 by our customers.
$603.51
257
7
Eco Widget 428
Eco Widget 428 is a books product supplied by Wayne Enterprises, released on 12/8/2023 and currently rated 1.3 out of 5 by our customers.
$72.97
359
8
Pro Blender 549
Pro Blender 549 is a electronics product supplied by Acme Corp, released on 6/2/2020 and currently rated 1.0 out of 5 by our customers.
$825.55
6
9
Deluxe Mug 514
Deluxe Mug 514 is a clothing product supplied by Wayne Enterprises, released on 8/11/2021 and currently rated 2.5 out of 5 by our customers.
$615.44
22
10
Mini Jacket 367
Mini Jacket 367 is a grocery product supplied by Initech, released on 10/4/2018 and currently rated 1.1 out of 5 by our customers.
$585.87
367
11
Vintage Gadget 192
Vintage Gadget 192 is a home product supplied by Soylent, released on 10/27/2022 and currently rated 1.6 out of 5 by our customers.
$334.92
388
12
Mini Mug 788
Mini Mug 788 is a toys product supplied by Acme Corp, released on 6/9/2020 and currently rated 3.2 out of 5 by our customers.
$712.80
144
13
Classic Mug 124
Classic Mug 124 is a books product supplied by Acme Corp, released on 9/9/2021 and currently rated 1.9 out of 5 by our customers.
$267.79
19
14
Compact Gadget 195
Compact Gadget 195 is a clothing product supplied by Wayne Enterprises, released on 10/9/2023 and currently rated 4.3 out of 5 by our customers.
$325.60
375
15
Deluxe Speaker 932
Deluxe Speaker 932 is a sports product supplied by Initech, released on 12/13/2022 and currently rated 3.5 out of 5 by our customers.
$281.65
272
16
Eco Widget 307
Eco Widget 307 is a grocery product supplied by Initech, released on 12/24/2022 and currently rated 1.5 out of 5 by our customers.
$982.55
390
17
Mini Blender 740
Mini Blender 740 is a electronics product supplied by Wonka Inc, released on 2/4/2022 and currently rated 4.5 out of 5 by our customers.
$597.20
195
18
Pro Blender 952
Pro Blender 952 is a sports product supplied by Stark Industries, released on 11/8/2018 and currently rated 1.0 out of 5 by our customers.
$132.04
53
19
Classic Drone 459
Classic Drone 459 is a electronics product supplied by Soylent, released on 3/5/2022 and currently rated 4.6 out of 5 by our customers.
$906.58
481
20
Mega Mug 839
Mega Mug 839 is a sports product supplied by Wonka Inc, released on 8/25/2022 and currently rated 3.1 out of 5 by our customers.
$282.70
169
21
Mega Speaker 349
Mega Speaker 349 is a books product supplied by Wonka Inc, released on 8/5/2019 and currently rated 1.3 out of 5 by our customers.
$830.28
320
22
Modern Mug 947
Modern Mug 947 is a home product supplied by Stark Industries, released on 11/5/2022 and currently rated 1.6 out of 5 by our customers.
$886.86
484
23
Mini Backpack 199
Mini Backpack 199 is a sports product supplied by Wayne Enterprises, released on 2/6/2021 and currently rated 3.9 out of 5 by our customers.
$349.39
260
24
Mini Speaker 940
Mini Speaker 940 is a electronics product supplied by Initech, released on 5/29/2022 and currently rated 2.3 out of 5 by our customers.
$60.13
107
25
Deluxe Lamp 430
Deluxe Lamp 430 is a home product supplied by Initech, released on 4/24/2019 and currently rated 5.0 out of 5 by our customers.
$760.77
331
26
Eco Mug 633
Eco Mug 633 is a toys product supplied by Initech, released on 3/7/2019 and currently rated 1.3 out of 5 by our customers.
$388.23
478
27
Compact Camera 900
Compact Camera 900 is a electronics product supplied by Stark Industries, released on 10/2/2021 and currently rated 1.1 out of 5 by our customers.
$300.37
290
28
Mega Mug 366
Mega Mug 366 is a grocery product supplied by Stark Industries, released on 10/8/2023 and currently rated 2.4 out of 5 by our customers.
$749.69
15
29
Mini Jacket 409
Mini Jacket 409 is a books product supplied by Acme Corp, released on 5/11/2020 and currently rated 3.4 out of 5 by our customers.
$604.08
321
30
Premium Camera 361
Premium Camera 361 is a grocery product supplied by Globex, released on 2/25/2023 and currently rated 3.3 out of 5 by our customers.
$352.80
0
31
Mega Gadget 949
Mega Gadget 949 is a books product supplied by Initech, released on 4/16/2019 and currently rated 3.6 out of 5 by our customers.
$654.24
99
32
Mega Lamp 485
Mega Lamp 485 is a books product supplied by Stark Industries, released on 10/1/2021 and currently rated 3.2 out of 5 by our customers.
$787.62
277
33
Compact Backpack 302
Compact Backpack 302 is a clothing product supplied by Wayne Enterprises, released on 10/10/2020 and currently rated 3.8 out of 5 by our customers.
$540.00
406
34
Pro Mug 551
Pro Mug 551 is a grocery product supplied by Umbrella, released on 12/2/2020 and currently rated 2.7 out of 5 by our customers.
$45.94
206
35
Ultra Mug 514
Ultra Mug 514 is a clothing product supplied by Wayne Enterprises, released on 12/21/2022 and currently rated 2.7 out of 5 by our customers.
$484.40
357
36
Pro Camera 944
Pro Camera 944 is a home product supplied by Wayne Enterprises, released on 7/1/2020 and currently rated 4.5 out of 5 by our customers.
$211.34
473
37
Mini Notebook 156
Mini Notebook 156 is a electronics product supplied by Umbrella, released on 2/28/2023 and currently rated 4.7 out of 5 by our customers.
$900.67
312
38
Premium Jacket 198
Premium Jacket 198 is a electronics product supplied by Wayne Enterprises, released on 6/22/2019 and currently rated 1.9 out of 5 by our customers.
$651.34
10
39
Classic Drone 215
Classic Drone 215 is a sports product supplied by Acme Corp, released on 6/8/2020 and currently rated 1.2 out of 5 by our customers.
$290.56
272
40
Mini Sneaker 570
Mini Sneaker 570 is a sports product supplied by Wayne Enterprises, released on 10/15/2021 and currently rated 4.6 out of 5 by our customers.
$897.23
338

Empty & loading states

With no rows the grid shows a message, or your EmptyTemplate. Loading shows a spinner - or your LoadingTemplate - in place of the rows and marks the grid aria-busy.


Nothing here yet

Tree data

ChildrenSelector turns Items into the roots of a tree (a treegrid whose rows carry their level and expanded state). Sorting keeps the hierarchy, and a search or filter prunes it to the matching branches. TreeInitiallyExpanded sets how it opens; ExpandAllAsync / CollapseAllAsync drive it from code. With CellNavigation, → and ← open and close a node from its first cell, and ← on a child goes to its parent.


src
Folder
81,710
2025-01-17
BitDataGrid
Folder
79,470
2025-01-11
BitDataGrid.razor
File
24,500
2025-01-02
BitDataGrid.razor.cs
File
41,200
2025-01-03
Models
Folder
1,470
2025-01-07
BitTextAlign.cs
File
320
2025-01-04
BitDataGridSortDescriptor.cs
File
540
2025-01-05
BitDataGridFilterOperator.cs
File
610
2025-01-06
Infrastructure
Folder
12,300
2025-01-10
BitDataGridDataProcessor.cs
File
8,900
2025-01-08
BitDataGridPropertyAccessor.cs
File
3,400
2025-01-09
BitDataGrid.Demo
Folder
2,240
2025-01-16
Program.cs
File
1,200
2025-01-12
Components
Folder
1,040
2025-01-15
App.razor
File
760
2025-01-13
Routes.razor
File
280
2025-01-14
docs
Folder
8,500
2025-01-20
README.md
File
6,400
2025-01-18
CHANGELOG.md
File
2,100
2025-01-19
assets
Folder
18,250
2025-01-24
logo.svg
File
4,800
2025-01-21
styles.css
File
12,300
2025-01-22
favicon.ico
File
1,150
2025-01-23
LICENSE
File
1,070
2025-01-25
.gitignore
File
410
2025-01-26


ChildrenProvider loads a node's children on its first expand (cached afterwards), and HasChildrenSelector tells an unloaded node whether to offer a toggle. Each folder below takes 600 ms to load.

LICENSE
File
1,070
2025-01-02

Virtualization

Virtualize renders only the rows in view (it needs a Height), and VirtualizeColumns does the same for columns, which then need pixel widths. This grid has 42 columns; try 100,000 rows.

10,000 rows

M01
M02
M03
M04
M05
M06
M07
M08
M09
M10
M11
M12
M13
M14
M15
M16
M17
M18
M19
M20
M21
M22
M23
M24
M25
M26
M27
M28
M29
M30
M31
M32
M33
M34
M35
M36
M37
M38
M39
M40

Server-side data

OnRead hands sorting, filtering, searching and paging to your code: each request carries the page window, the descriptors, the search term and a CancellationToken the grid cancels when a newer request replaces it. Return the rows and the TotalCount.

1
Vintage Gadget 212
Home
Wayne Enterprises
$171.75
131
2
Eco Notebook 554
Clothing
Soylent
$382.16
130
3
Classic Gadget 181
Toys
Wonka Inc
$813.02
269
4
Vintage Blender 267
Electronics
Wayne Enterprises
$310.12
291
5
Vintage Jacket 234
Electronics
Wayne Enterprises
$55.50
390
6
Smart Drone 229
Electronics
Stark Industries
$603.51
257
7
Eco Widget 428
Books
Wayne Enterprises
$72.97
359
8
Pro Blender 549
Electronics
Acme Corp
$825.55
6
9
Deluxe Mug 514
Clothing
Wayne Enterprises
$615.44
22
10
Mini Jacket 367
Grocery
Initech
$585.87
367
1–10 of 523
Page 1 of 53

Last request → skip 0, take 10, sorts: 0, filters: 0, total: 523


With Virtualize instead of paging, rows are fetched as they scroll into view - 100,000 here. The result's Aggregates fill the footer with totals over the whole matching set.

Infinite scrolling

OnLoadMore appends the next LoadMoreBatchSize rows as the user nears the end - no total, no pager - and stops at a short batch. It needs a Height. An export asks once for every row with Take = null.

1
Vintage Gadget 212
Home
Wayne Enterprises
$171.75
131
2
Eco Notebook 554
Clothing
Soylent
$382.16
130
3
Classic Gadget 181
Toys
Wonka Inc
$813.02
269
4
Vintage Blender 267
Electronics
Wayne Enterprises
$310.12
291
5
Vintage Jacket 234
Electronics
Wayne Enterprises
$55.50
390
6
Smart Drone 229
Electronics
Stark Industries
$603.51
257
7
Eco Widget 428
Books
Wayne Enterprises
$72.97
359
8
Pro Blender 549
Electronics
Acme Corp
$825.55
6
9
Deluxe Mug 514
Clothing
Wayne Enterprises
$615.44
22
10
Mini Jacket 367
Grocery
Initech
$585.87
367
11
Vintage Gadget 192
Home
Soylent
$334.92
388
12
Mini Mug 788
Toys
Acme Corp
$712.80
144
13
Classic Mug 124
Books
Acme Corp
$267.79
19
14
Compact Gadget 195
Clothing
Wayne Enterprises
$325.60
375
15
Deluxe Speaker 932
Sports
Initech
$281.65
272
16
Eco Widget 307
Grocery
Initech
$982.55
390
17
Mini Blender 740
Electronics
Wonka Inc
$597.20
195
18
Pro Blender 952
Sports
Stark Industries
$132.04
53
19
Classic Drone 459
Electronics
Soylent
$906.58
481
20
Mega Mug 839
Sports
Wonka Inc
$282.70
169
21
Mega Speaker 349
Books
Wonka Inc
$830.28
320
22
Modern Mug 947
Home
Stark Industries
$886.86
484
23
Mini Backpack 199
Sports
Wayne Enterprises
$349.39
260
24
Mini Speaker 940
Electronics
Initech
$60.13
107
25
Deluxe Lamp 430
Home
Initech
$760.77
331
26
Eco Mug 633
Toys
Initech
$388.23
478
27
Compact Camera 900
Electronics
Stark Industries
$300.37
290
28
Mega Mug 366
Grocery
Stark Industries
$749.69
15
29
Mini Jacket 409
Books
Acme Corp
$604.08
321
30
Premium Camera 361
Grocery
Globex
$352.80
0
31
Mega Gadget 949
Books
Initech
$654.24
99
32
Mega Lamp 485
Books
Stark Industries
$787.62
277
33
Compact Backpack 302
Clothing
Wayne Enterprises
$540.00
406
34
Pro Mug 551
Grocery
Umbrella
$45.94
206
35
Ultra Mug 514
Clothing
Wayne Enterprises
$484.40
357
36
Pro Camera 944
Home
Wayne Enterprises
$211.34
473
37
Mini Notebook 156
Electronics
Umbrella
$900.67
312
38
Premium Jacket 198
Electronics
Wayne Enterprises
$651.34
10
39
Classic Drone 215
Sports
Acme Corp
$290.56
272
40
Mini Sneaker 570
Sports
Wayne Enterprises
$897.23
338

Batch #1 → rows 1–40

IQueryable data source

Bind an IQueryable<T> - an EF Core DbSet, say - and the filters, sorts, search and paging become an expression the provider runs at the source, so only the current page is materialized.

1
Vintage Gadget 212
Wayne Enterprises
$171.75
131
2
Eco Notebook 554
Soylent
$382.16
130
3
Classic Gadget 181
Wonka Inc
$813.02
269
4
Vintage Blender 267
Wayne Enterprises
$310.12
291
5
Vintage Jacket 234
Wayne Enterprises
$55.50
390
6
Smart Drone 229
Stark Industries
$603.51
257
7
Eco Widget 428
Wayne Enterprises
$72.97
359
8
Pro Blender 549
Acme Corp
$825.55
6
9
Deluxe Mug 514
Wayne Enterprises
$615.44
22
10
Mini Jacket 367
Initech
$585.87
367
1–10 of 400
Page 1 of 40

Export

ShowCsvExport and ShowExcelExport download every matching row (not just the page) as CSV or a real .xlsx with typed cells, an AutoFilter, frozen panes for Frozen columns and merged cells for ColSpan; ExcelExportStyled adds the grid's current colors. ExportValue exports a template column's value, Exportable="false" leaves a column out, and ExportFileName names the files. In code, every export method also takes selectedOnly.

1
Vintage Gadget 212
Home
$171.75
1/19/2023
Wayne Enterprises
$22,499
2
⚠ Eco Notebook 554 - discontinued
$382.16
7/18/2019
Soylent
$49,681
3
Classic Gadget 181
Toys
$813.02
3/12/2023
Wonka Inc
$218,702
4
⚠ Vintage Blender 267 - discontinued
$310.12
1/25/2021
Wayne Enterprises
$90,245
5
⚠ Vintage Jacket 234 - discontinued
$55.50
8/20/2022
Wayne Enterprises
$21,645
6
Smart Drone 229
Electronics
$603.51
2/18/2020
Stark Industries
$155,102
7
Eco Widget 428
Books
$72.97
12/8/2023
Wayne Enterprises
$26,196
8
⚠ Pro Blender 549 - discontinued
$825.55
6/2/2020
Acme Corp
$4,953
9
⚠ Deluxe Mug 514 - discontinued
$615.44
8/11/2021
Wayne Enterprises
$13,540
10
Mini Jacket 367
Grocery
$585.87
10/4/2018
Initech
$215,014
11
⚠ Vintage Gadget 192 - discontinued
$334.92
10/27/2022
Soylent
$129,949
12
Mini Mug 788
Toys
$712.80
6/9/2020
Acme Corp
$102,643
13
Classic Mug 124
Books
$267.79
9/9/2021
Acme Corp
$5,088
14
⚠ Compact Gadget 195 - discontinued
$325.60
10/9/2023
Wayne Enterprises
$122,100
15
Deluxe Speaker 932
Sports
$281.65
12/13/2022
Initech
$76,609
16
Eco Widget 307
Grocery
$982.55
12/24/2022
Initech
$383,195
17
Mini Blender 740
Electronics
$597.20
2/4/2022
Wonka Inc
$116,454
18
⚠ Pro Blender 952 - discontinued
$132.04
11/8/2018
Stark Industries
$6,998
19
⚠ Classic Drone 459 - discontinued
$906.58
3/5/2022
Soylent
$436,065
20
Mega Mug 839
Sports
$282.70
8/25/2022
Wonka Inc
$47,776
21
Mega Speaker 349
Books
$830.28
8/5/2019
Wonka Inc
$265,690
22
Modern Mug 947
Home
$886.86
11/5/2022
Stark Industries
$429,240
23
Mini Backpack 199
Sports
$349.39
2/6/2021
Wayne Enterprises
$90,841
24
⚠ Mini Speaker 940 - discontinued
$60.13
5/29/2022
Initech
$6,434
25
Deluxe Lamp 430
Home
$760.77
4/24/2019
Initech
$251,815
26
Eco Mug 633
Toys
$388.23
3/7/2019
Initech
$185,574
27
Compact Camera 900
Electronics
$300.37
10/2/2021
Stark Industries
$87,107
28
Mega Mug 366
Grocery
$749.69
10/8/2023
Stark Industries
$11,245
29
Mini Jacket 409
Books
$604.08
5/11/2020
Acme Corp
$193,910
30
Premium Camera 361
Grocery
$352.80
2/25/2023
Globex
$0

Row reordering

RowReorderable adds a ⠿ handle: drag it onto another row (mouse, touch or pen), or focus it and press ↑/↓. The grid moves the item in the bound list and raises OnRowReorder. It pauses while the view is sorted, filtered or grouped.

Reorder
ID
Name
Category
Price
1
Vintage Gadget 212
Home
$171.75
2
Eco Notebook 554
Clothing
$382.16
3
Classic Gadget 181
Toys
$813.02
4
Vintage Blender 267
Electronics
$310.12
5
Vintage Jacket 234
Electronics
$55.50
6
Smart Drone 229
Electronics
$603.51
7
Eco Widget 428
Books
$72.97
8
Pro Blender 549
Electronics
$825.55
9
Deluxe Mug 514
Clothing
$615.44
10
Mini Jacket 367
Grocery
$585.87
11
Vintage Gadget 192
Home
$334.92
12
Mini Mug 788
Toys
$712.80

Cell events & context menu

OnCellClick, OnCellDoubleClick and OnCellContextMenu report the row, the column, the value and the mouse event; right-click a cell for a custom menu. OnRowClick and OnRowDoubleClick report the row alone.

1
Vintage Gadget 212
Home
$171.75
2
Eco Notebook 554
Clothing
$382.16
3
Classic Gadget 181
Toys
$813.02
4
Vintage Blender 267
Electronics
$310.12
5
Vintage Jacket 234
Electronics
$55.50
6
Smart Drone 229
Electronics
$603.51
7
Eco Widget 428
Books
$72.97
8
Pro Blender 549
Electronics
$825.55
9
Deluxe Mug 514
Clothing
$615.44
10
Mini Jacket 367
Grocery
$585.87
11
Vintage Gadget 192
Home
$334.92
12
Mini Mug 788
Toys
$712.80
13
Classic Mug 124
Books
$267.79
14
Compact Gadget 195
Clothing
$325.60
15
Deluxe Speaker 932
Sports
$281.65
16
Eco Widget 307
Grocery
$982.55
17
Mini Blender 740
Electronics
$597.20
18
Pro Blender 952
Sports
$132.04
19
Classic Drone 459
Electronics
$906.58
20
Mega Mug 839
Sports
$282.70
21
Mega Speaker 349
Books
$830.28
22
Modern Mug 947
Home
$886.86
23
Mini Backpack 199
Sports
$349.39
24
Mini Speaker 940
Electronics
$60.13
25
Deluxe Lamp 430
Home
$760.77
26
Eco Mug 633
Toys
$388.23
27
Compact Camera 900
Electronics
$300.37
28
Mega Mug 366
Grocery
$749.69
29
Mini Jacket 409
Books
$604.08
30
Premium Camera 361
Grocery
$352.80
31
Mega Gadget 949
Books
$654.24
32
Mega Lamp 485
Books
$787.62
33
Compact Backpack 302
Clothing
$540.00
34
Pro Mug 551
Grocery
$45.94
35
Ultra Mug 514
Clothing
$484.40
36
Pro Camera 944
Home
$211.34
37
Mini Notebook 156
Electronics
$900.67
38
Premium Jacket 198
Electronics
$651.34
39
Classic Drone 215
Sports
$290.56
40
Mini Sneaker 570
Sports
$897.23

Click, double-click or right-click any cell.

Programmatic control

Everything the UI does is public API: SortByAsync, ApplyFilterAsync, GroupByAsync, GoToPageAsync, SetPageSizeAsync, MoveColumnAsync, SearchAsync, RefreshAsync and more. OnSortChange, OnFilterChange, OnGroupChange and OnPageChange report each change however it was made.


1
Vintage Gadget 212
Home
$171.75
131
2
Eco Notebook 554
Clothing
$382.16
130
3
Classic Gadget 181
Toys
$813.02
269
4
Vintage Blender 267
Electronics
$310.12
291
5
Vintage Jacket 234
Electronics
$55.50
390
6
Smart Drone 229
Electronics
$603.51
257
7
Eco Widget 428
Books
$72.97
359
8
Pro Blender 549
Electronics
$825.55
6
9
Deluxe Mug 514
Clothing
$615.44
22
10
Mini Jacket 367
Grocery
$585.87
367
1–10 of 200
Page 1 of 20

The grid reports every view change here.

State persistence

OnStateChange hands over a GetState snapshot - page and page size, search, sorts, filters, groups and which are open, and each column's order, width and visibility - after every change. Store it, then give it to ApplyStateAsync on a new grid; recreate this one to see. A JSON round trip is fine: filter values are converted back to their column's type.

Sort, filter, resize, move or hide columns - every change is saved.

1
Vintage Gadget 212
Home
$171.75
131
2
Eco Notebook 554
Clothing
$382.16
130
3
Classic Gadget 181
Toys
$813.02
269
4
Vintage Blender 267
Electronics
$310.12
291
5
Vintage Jacket 234
Electronics
$55.50
390
6
Smart Drone 229
Electronics
$603.51
257
7
Eco Widget 428
Books
$72.97
359
8
Pro Blender 549
Electronics
$825.55
6
9
Deluxe Mug 514
Clothing
$615.44
22
10
Mini Jacket 367
Grocery
$585.87
367
1–10 of 120
Page 1 of 12

Localization

Every string the grid renders or announces - pager, messages, placeholders, buttons, accessible names and live-region announcements - comes from Strings. Override what you need; the rest keeps its English default.

1
Vintage Gadget 212
$171.75
131
2
Eco Notebook 554
$382.16
130
3
Classic Gadget 181
$813.02
269
4
Vintage Blender 267
$310.12
291
5
Vintage Jacket 234
$55.50
390
6
Smart Drone 229
$603.51
257
7
Eco Widget 428
$72.97
359
8
Pro Blender 549
$825.55
6
1–8 von 60
Seite 1 von 8

Disabled

Disabled keeps the data readable - a focused cell still moves and copies - but disables every control and gesture in the grid, which reports aria-disabled.


ID
Name
Category
Price
1
Vintage Gadget 212
Home
$171.75
2
Eco Notebook 554
Clothing
$382.16
3
Classic Gadget 181
Toys
$813.02
4
Vintage Blender 267
Electronics
$310.12
5
Vintage Jacket 234
Electronics
$55.50
6
Smart Drone 229
Electronics
$603.51
7
Eco Widget 428
Books
$72.97
8
Pro Blender 549
Electronics
$825.55
1–8 of 40
Page 1 of 5

Cascading parameters

BitParams carries a BitDataGridParams to every grid under it - the defaults an app wants everywhere, Strings included. Both grids here take row numbers, a filter row and pages of 5 from it; they are defaults, not overrides, so the second grid keeps the Striped it sets itself.

1
1
Vintage Gadget 212
$171.75
2
2
Eco Notebook 554
$382.16
3
3
Classic Gadget 181
$813.02
4
4
Vintage Blender 267
$310.12
5
5
Vintage Jacket 234
$55.50
1–5 of 30
Page 1 of 6

1
1
Vintage Gadget 212
$171.75
2
2
Eco Notebook 554
$382.16
3
3
Classic Gadget 181
$813.02
4
4
Vintage Blender 267
$310.12
5
5
Vintage Jacket 234
$55.50
1–5 of 30
Page 1 of 6

Style & Class

Style and Class land on the root; Styles and Classes reach each part on its own - the toolbar, the header row and cells, the rows, a selected row, the cells, the footer, the pager and more.

1
Vintage Gadget 212
$171.75
2
Eco Notebook 554
$382.16
3
Classic Gadget 181
$813.02
4
Vintage Blender 267
$310.12
5
Vintage Jacket 234
$55.50
1–5 of 20
Page 1 of 4


The grid also reads CSS variables. They inherit, so a value on :root or an ancestor restyles every grid below it, and one on Style restyles one grid. Here: a compact, accent-colored grid.

1
1
Vintage Gadget 212
Home
$171.75
2
2
Eco Notebook 554
Clothing
$382.16
3
3
Classic Gadget 181
Toys
$813.02
4
4
Vintage Blender 267
Electronics
$310.12
5
5
Vintage Jacket 234
Electronics
$55.50
6
6
Smart Drone 229
Electronics
$603.51
7
7
Eco Widget 428
Books
$72.97
8
8
Pro Blender 549
Electronics
$825.55
9
9
Deluxe Mug 514
Clothing
$615.44
10
10
Mini Jacket 367
Grocery
$585.87
11
11
Vintage Gadget 192
Home
$334.92
12
12
Mini Mug 788
Toys
$712.80
13
13
Classic Mug 124
Books
$267.79
14
14
Compact Gadget 195
Clothing
$325.60
15
15
Deluxe Speaker 932
Sports
$281.65
16
16
Eco Widget 307
Grocery
$982.55
17
17
Mini Blender 740
Electronics
$597.20
18
18
Pro Blender 952
Sports
$132.04
19
19
Classic Drone 459
Electronics
$906.58
20
20
Mega Mug 839
Sports
$282.70

RTL

Dir="BitDir.Rtl" mirrors the grid: frozen columns, arrows and keyboard navigation follow the reading direction. Without it, the grid takes a cascaded BitDir, or else the page's direction.

1
قدیمی گجت 212
خانه
$171.75
131
2
اقتصادی دفترچه 554
پوشاک
$382.16
130
3
کلاسیک گجت 181
اسباب‌بازی
$813.02
269
4
قدیمی مخلوط‌کن 267
الکترونیک
$310.12
291
5
قدیمی ژاکت 234
الکترونیک
$55.50
390
6
هوشمند پهپاد 229
الکترونیک
$603.51
257
7
اقتصادی ویجت 428
کتاب
$72.97
359
8
حرفه‌ای مخلوط‌کن 549
الکترونیک
$825.55
6
1–8 از 60
صفحهٔ 1 از 8

CSS variables

The public custom properties this component reads off its root, for what no parameter covers.

Every variable is read with a fallback and never declared by the component, so it inherits like any other custom property: set one on :root (or in a [bit-theme] block) to restyle every instance, on any ancestor to restyle the ones inside it, or on the Style of one instance to restyle that one alone. Leave a variable unset and the component falls back to the theme token beside it.

BitDataGrid CSS variables

Name Default value Description
--bit-DataGrid-background --bit-clr-bg-pri Background of the grid and its rows.
--bit-DataGrid-color --bit-clr-fg-pri Text color.
--bit-DataGrid-font-family --bit-tpg-font-family Font of the whole grid.
--bit-DataGrid-font-size --bit-tpg-fs-sm Font size of the whole grid.
--bit-DataGrid-line-height 1.4 Line height of the cells.
--bit-DataGrid-border-color --bit-clr-brd-ter Color of the outer border and of every line between rows and columns.
--bit-DataGrid-border-radius --bit-shp-radius-surface Corner radius of the grid.
--bit-DataGrid-cell-padding spacing(1) spacing(1.25) Padding of every cell; with RowHeight, the density of the grid.
--bit-DataGrid-header-background --bit-clr-bg-sec Background of the header rows and the column chooser.
--bit-DataGrid-header-color The grid's color Text color of the header rows.
--bit-DataGrid-header-font-weight --bit-tpg-fw-semibold Font weight of the column titles.
--bit-DataGrid-stripe-background --bit-clr-bg-sec Background of every other row while Striped.
--bit-DataGrid-hover-background --bit-clr-bg-pri-hover Background of the row under the pointer while Hoverable.
--bit-DataGrid-selected-background --bit-clr-pri-tint Wash laid over a selected row; the row stays opaque underneath, so frozen cells still cover what scrolls by.
--bit-DataGrid-selected-color The grid's color Text color of a selected row.
--bit-DataGrid-editing-background --bit-clr-wrn-tint Wash laid over the row being edited (in Cell mode, over the cell).
--bit-DataGrid-accent-color --bit-clr-pri Sort arrows and priority badges, the active group toggle, the group bar, the checkboxes and the resize handle.
--bit-DataGrid-focus-color --bit-clr-pri-focus Focus indicator of the cells, the rows and the controls in the grid.
--bit-DataGrid-group-background --bit-clr-bg-ter Background of the group header rows.
--bit-DataGrid-group-indent spacing(2.5) Indent of each nested group level.
--bit-DataGrid-tree-indent spacing(2.25) Indent of each tree level.
--bit-DataGrid-detail-background --bit-clr-bg-sec Background of the expanded detail rows.
--bit-DataGrid-footer-background --bit-clr-bg-sec Background of the footer row.
--bit-DataGrid-disabled-color --bit-clr-fg-dis Text color of a disabled grid.

API

Every parameter, public member, sub-class and enum this component exposes.

BitDataGrid parameters

Name Type Default value Description
Items IEnumerable<TItem>? null The data source bound to the grid for client-side processing. An IQueryable<T> (e.g. an EF Core DbSet) gets filtering/sorting/paging translated into expression trees the provider executes at the source, materializing only the current page.
OnRead Func<BitDataGridReadRequest, Task<BitDataGridReadResult<TItem>>>? null Server-side data callback. When set, the grid delegates sort/filter/page/group to the caller.
OnLoadMore Func<BitDataGridReadRequest, Task<BitDataGridReadResult<TItem>>>? null Infinite-scrolling data callback. Loads rows in batches and appends the next batch as the user scrolls toward the end. CSV/Excel exports issue a single request with Take = null ("all rows"), so the handler should honor a null Take.
LoadMoreBatchSize int 50 Number of rows fetched per batch in infinite-scrolling mode.
ChildContent RenderFragment? null Column definitions and other declarative children.
Columns RenderFragment? null Alias of ChildContent, letting column definitions read declaratively as <Columns>...</Columns>. Both fragments are rendered when both are set.
Loading bool false Replaces the grid body with a loading row (LoadingTemplate, or a spinner and the localized loading text) while data is being fetched, and marks the grid aria-busy. Rows are hidden until loading ends.
ShowSearchBox bool false Renders a quick-search box in the toolbar that filters rows across every searchable column at once, matching case-insensitively against the text each column renders. Forwarded as BitDataGridReadRequest.Search in server/infinite modes; translated into an OR of Contains predicates over the string columns for an IQueryable source; a tree grid is pruned to the branches containing a match. Suppressed on a lazily-loaded tree (ChildrenProvider), whose unloaded children cannot be examined.
SearchText string? null The quick-search term (supports two-way binding), so the search can also be driven from an external field.
SearchTextChanged EventCallback<string?> Raised whenever the quick-search term changes.
SearchDebounce int 300 How long (ms) the search box waits after the last keystroke before applying the term, so the grid searches as the user types without re-querying on every character. 0 applies each keystroke immediately.
KeyField Func<TItem, object>? null Optional key selector used for selection/edit identity. Defaults to reference equality.
ChildrenSelector Func<TItem, IEnumerable<TItem>?>? null Child selector that turns the grid into a hierarchical tree grid.
ChildrenProvider Func<TItem, Task<IEnumerable<TItem>?>>? null Async children provider for a lazily-loaded tree grid: children are fetched on a node's first expand (e.g. from a backend) and cached. Mutually exclusive with ChildrenSelector; pair with HasChildrenSelector.
HasChildrenSelector Func<TItem, bool>? null Tells whether a node can have children before they are loaded, so unloaded lazy nodes render an expand toggle. Only used with ChildrenProvider.
TreeInitiallyExpanded bool false When tree mode is active, controls whether nodes start expanded. Ignored in lazy mode (ChildrenProvider).
Height string? null Height of the scroll viewport, e.g. "480px". Required for virtualization and infinite scrolling.
Classes BitDataGridClassStyles? null Custom CSS classes for the different parts of the grid.
Styles BitDataGridClassStyles? null Custom CSS styles for the different parts of the grid.
Striped bool true Renders alternate-row striping.
Hoverable bool true Highlights the row under the pointer.
Bordered bool true Draws the outer border and the lines between columns; the lines between rows are always drawn.
ShowHeader bool true Renders the header rows (column titles, header groups and the filter row).
AriaLabelledBy string? null The id of the element - a visible heading, say - that names the grid, in place of AriaLabel. Lands on the element with the grid role.
AriaDescribedBy string? null The id of the element that describes the grid - a caption, or how its keyboard works.
ShowFooter bool false Renders the footer/aggregate row.
ShowRowNumbers bool false Renders a narrow leading gutter numbering the rows by their position in the whole dataset, so the count continues across pages, virtualized windows and infinite-scroll batches. It is chrome, not data: exports and clipboard copies never carry it.
ShowCellTooltips bool false Gives every value cell a native tooltip with its full text, so a value the column is too narrow to show stays readable on hover. Overridable per column with ShowTooltip; cells rendered by a Template are excluded.
WrapCellText bool false Lets long headers and cell values wrap onto several lines instead of clipping to one, with each row growing to fit its tallest cell. Overridable per column with WrapText; ignored while Virtualize is on, which requires a uniform row height.
RowClass Func<TItem, string?>? null Per-row CSS class selector, appended after the grid's own row classes - the conditional row styling counterpart of AG Grid's rowClassRules.
RowStyle Func<TItem, string?>? null Per-row inline style selector, appended after the row's layout style.
Sortable bool true Enables column sorting by clicking headers.
MultiSort bool true Enables multi-column sorting via Ctrl/⌘+click with priority badges.
AllowUnsorted bool true Whether a third header click returns the column to its unsorted state (ascending → descending → unsorted). Set false to cycle between ascending and descending only. Overridable per column with AllowUnsorted.
Filterable bool false Renders a per-column quick-filter row. A tree grid filters by pruning the hierarchy to the branches containing a match; the row is suppressed on a lazily-loaded tree (ChildrenProvider).
FilterOperators bool false Shows an operator dropdown next to text/number/date filter editors so users pick the comparison (contains/starts with/=/≠/>/≥/</≤/is blank, and for text and numbers is any of/is none of over a comma-separated list) instead of the fixed default.
FilterDebounce int 300 How long (ms) a text or number filter box waits after the last keystroke before applying, so the grid filters as the user types. 0 applies each keystroke; a negative value applies only on Enter or blur.
Strings BitDataGridStrings new() All user-visible strings rendered by the grid; assign a customized instance to localize the UI.
Resizable bool false Lets the columns be resized: drag a header's edge, double-click it to fit the content, or focus it (a separator) and use Left/Right, Home/End (MinWidth/MaxWidth) and Enter (fit).
Reorderable bool false Lets the columns be reordered: drag a header (mouse, touch or pen), press Ctrl+Left/Right on it, or use the column chooser's move buttons.
Groupable bool false Enables grouping via a header button on groupable columns.
GroupsInitiallyCollapsed bool false Groups start collapsed instead of expanded, so a grouped grid opens as a compact list of group headers. Flipped at runtime by ExpandAllGroupsAsync/CollapseAllGroupsAsync.
ShowToolbar bool false Renders the toolbar, which hosts the Clear filters button while a filter is on. Search, export, the column chooser, Add and ToolbarTemplate show it on their own; an empty bar takes no room.
ShowColumnChooser bool false Renders the toolbar button that opens the column chooser, which shows and hides columns and, with Reorderable, moves them (the single-pointer and keyboard alternative to dragging a header).
ShowCsvExport bool false Renders a CSV export button. The export covers all matching rows in every data mode, not just the rendered ones.
ShowExcelExport bool false Renders an Excel (.xlsx) export button. The workbook is generated in-process with no external dependency, covers all matching rows in every data mode, and mirrors the grid's layout: bold frozen header row, column widths, leading frozen columns as a freeze pane and ColSpan cells as merged cells.
ExcelExportStyled bool false When true, Excel exports also carry the grid's current visual theme: the rendered header/row colors, striped alternating rows, border color and bold/italic fonts are sampled from the live DOM at export time (so the active theme - including dark mode - lands in the workbook). Falls back to the plain bold-header styling when JS is unavailable (prerendering).
ExportFileName string? null Base name (without extension) of the downloaded export files, e.g. "orders" for orders.csv / orders.xlsx. Defaults to "export".
CellNavigation bool false Makes the data cells the grid's one tab stop, with a roving tabindex: the arrows, Home/End and PageUp/PageDown move; Enter/F2 edit, and typing into a text or number cell edits it with what was typed (Enter otherwise toggles the row's detail); Esc cancels; Space toggles the row's selection (Shift+Space a range) and Ctrl+A selects all; Delete deletes the row when Editable; in a tree, the arrows open and close a node from its first cell. The per-row checkboxes, toggles and command buttons leave the tab order.
ClipboardCopy bool false Enables copying to the system clipboard with Ctrl/⌘+C on a focused cell (requires CellNavigation) and through CopyToClipboardAsync. Copies the selected rows - or the focused one - as tab-separated text with a header line, so it pastes into a spreadsheet as columns.
RowReorderable bool false Enables drag-and-drop row reordering (mouse, touch and pen; plus keyboard via the drag handle's arrow keys).
OnRowReorder EventCallback<BitDataGridRowReorderEventArgs<TItem>> Raised when a row is dropped onto another row during reordering.
SelectionMode BitSelectionMode BitSelectionMode.None How rows can be selected: None, Single (a row click, or Space on a focused cell - Single turns CellNavigation on) or Multiple (a checkbox column with a select-all box).
SelectedItems IReadOnlyList<TItem>? null The selected items (supports two-way binding).
SelectedItemsChanged EventCallback<IReadOnlyList<TItem>> Raised when the selection changes.
OnRowClick EventCallback<TItem> Raised when a row is clicked.
OnRowDoubleClick EventCallback<TItem> Raised when a row is double-clicked - the usual hook for "open this record", or for starting an inline edit with BeginEdit.
OnCellClick EventCallback<BitDataGridCellEventArgs<TItem>> Raised when a data cell is clicked.
OnCellDoubleClick EventCallback<BitDataGridCellEventArgs<TItem>> Raised when a data cell is double-clicked.
OnCellContextMenu EventCallback<BitDataGridCellEventArgs<TItem>> Raised when a data cell is right-clicked.
IsRowSelectionDisabled Func<TItem, bool>? null Predicate returning true when a given row may not be selected.
Pageable bool false Enables paging with a pager UI.
PageSize int 20 The number of rows per page.
PageSizeOptions int[] { 10, 20, 50, 100 } The page-size options offered in the pager dropdown.
PagerPlacement BitPlacement BitPlacement.Bottom Where the pager renders relative to the grid. Only Top, Bottom and TopAndBottom are meaningful; any other side leaves the pager under the grid.
Virtualize bool false Renders only the visible rows for large datasets. Requires a fixed Height and RowHeight. In server mode (OnRead) with paging off, row windows are fetched on demand as the user scrolls; with OnLoadMore, the accumulated batches are virtualized so the DOM stays bounded. Requires a uniform row height, so RowHeightSelector and WrapCellText are ignored while it is on and expanded DetailTemplate rows are not accounted for - pair master-detail with paging instead.
RowHeight float 36 Uniform row height in pixels (required when virtualizing).
RowHeightSelector Func<TItem, float>? null Optional per-row height selector (ignored while virtualizing).
VirtualizeColumns bool false Renders only the columns in (and near) the horizontal viewport, replacing scrolled-out runs with spacers - for grids with very many columns. Requires explicit px column widths; not applied with column header groups or ColSpans.
Editable bool false Enables inline editing with a command column.
EditMode BitDataGridEditMode BitDataGridEditMode.Row Row edits the whole row with Save/Cancel; Cell edits one cell at a time - Enter, F2, a double-click or typing into it (Backspace: empty) opens it, Enter, Tab (opening the next cell) or moving the focus out commits it (raising OnRowSave), Escape cancels. Cell mode makes the cells keyboard-navigable.
NewItemFactory Func<TItem>? null Factory used by the toolbar Add button to create a new row.
OnRowSave EventCallback<TItem> Raised when an edited row is saved.
OnRowCancel EventCallback<TItem> Raised when an edit is cancelled.
OnRowDelete EventCallback<TItem> Raised when a row is deleted (via the command column's Delete button or the Delete key in cell navigation).
OnRowCreate EventCallback<TItem> Raised when a new row is created.
EmptyTemplate RenderFragment? null Custom content rendered when there is no data.
LoadingTemplate RenderFragment? null Custom content rendered in place of the built-in spinner while Loading is true.
ToolbarTemplate RenderFragment? null Custom content rendered in the toolbar's start area.
DetailTemplate RenderFragment<TItem>? null Expandable master-detail content rendered under a row.
ShowDetailToggle bool true Renders the built-in expand/collapse toggle column while a DetailTemplate is set. Turn it off to drive the detail rows from row clicks (ExpandDetailOnRowClick) or from code; only the toggle column disappears, the detail rows still render.
ExpandDetailOnRowClick bool false Expands (and collapses) a row's detail content when the row itself is clicked. Combines with SelectionMode: a click both selects the row and toggles its detail. Clicks inside the reorder/select/command cells are excluded.
ExpandedDetailItems IReadOnlyList<TItem>? null Rows whose detail content is expanded, as a two-way bindable list. Binding it takes control of the expanded state, letting a parent expand or collapse details declaratively.
ExpandedDetailItemsChanged EventCallback<IReadOnlyList<TItem>> Raised with the new set of expanded rows whenever a detail row is expanded or collapsed.
OnDetailToggle EventCallback<BitDataGridDetailEventArgs<TItem>> Raised when a single row's detail content is expanded or collapsed.
OnSortChange EventCallback<IReadOnlyList<BitDataGridSortDescriptor>> Raised with the new sort descriptors whenever the sorting changes, by header click or through the programmatic API.
OnFilterChange EventCallback<IReadOnlyList<BitDataGridFilterDescriptor>> Raised with the new filter descriptors whenever the filtering changes.
OnGroupChange EventCallback<IReadOnlyList<BitDataGridGroupDescriptor>> Raised with the new group descriptors whenever the grouping changes.
OnPageChange EventCallback<int> Raised with the new 1-based page number whenever the page or the page size changes.
OnStateChange EventCallback<BitDataGridState> Raised with a GetState snapshot once the grid has re-rendered after anything it captures changed - sorts, filters, search, groups and their expansion, page, page size, and the columns' order, widths and visibility - by the user or through the API. The hook for persisting the view; ApplyStateAsync does not raise it.

BitDataGrid public members

Name Type Default value Description
RefreshAsync Task Recomputes the data view (filter → sort → group → page) and re-renders the grid.
SortByAsync Task SortByAsync(columnId, direction, additive) - programmatically sorts by a column; BitDataGridSortDirection.None removes the sort.
ClearSortsAsync Task Removes all active sorts and refreshes.
ApplyFilterAsync Task ApplyFilterAsync(columnId, operator, value) - programmatically applies a filter, replacing any existing one on the column.
ApplyRangeFilterAsync Task ApplyRangeFilterAsync(columnId, from, toExclusive) - applies a half-open range filter (>= from AND < toExclusive), the shape a "between" criterion takes; emitted as two ordinary comparison descriptors so remote and queryable sources need no special handling.
ClearFilterAsync Task ClearFilterAsync(columnId) - removes the filter(s) applied to a column.
ClearFiltersAsync Task Clears all active column filters and refreshes.
GroupByAsync Task GroupByAsync(columnId) - adds the column as the next (nested) grouping level.
UngroupAsync Task UngroupAsync(columnId) - removes the column's grouping level.
ClearGroupsAsync Task Removes all active groupings and refreshes.
ExpandAllGroupsAsync Task Expands every group at every nesting level, and makes newly-built groups expanded (so the choice survives a regrouping or a data refresh).
CollapseAllGroupsAsync Task Collapses every group at every nesting level, and makes newly-built groups collapsed.
SearchAsync Task SearchAsync(text) - applies the grid-wide quick-search term and resets to the first page; null or empty clears it. Raises SearchTextChanged.
ActiveSearch string? null The active quick-search term, or null when no search is applied.
SelectAllAsync Task Selects every selectable row of the current view (the whole filtered set locally; the loaded rows in server, queryable and infinite modes). Requires SelectionMode.Multiple.
ClearSelectionAsync Task Clears the row selection.
CopyToClipboardAsync Task<int> CopyToClipboardAsync() / CopyToClipboardAsync(fallbackRow) - copies the selected rows (or, in the second overload, the given row when nothing is selected) to the system clipboard as tab-separated text with a header line, and returns how many rows were copied; 0 when the clipboard is unavailable.
AutoFitColumnAsync Task AutoFitColumnAsync(columnId) - sizes a column to its widest rendered content, the same result as double-clicking its resize handle.
AutoFitAllColumnsAsync Task Auto-fits every visible column to its widest rendered content.
GoToPageAsync Task GoToPageAsync(page) - navigates to the given 1-based page (clamped to the valid range).
MoveColumnAsync Task MoveColumnAsync(columnId, index) - moves a column to a 0-based position among all the columns (hidden ones included), whatever its Reorderable says. Raises OnStateChange.
SetPageSizeAsync Task SetPageSizeAsync(size) - changes the page size and resets to the first page (without mutating the PageSize parameter).
GetState BitDataGridState Captures the user-adjustable state (page, page size, quick search, sorts, filters, groups with their expand/collapse state, and column layout) as a serializable snapshot.
ApplyStateAsync Task ApplyStateAsync(state) - restores a state snapshot captured by GetState.
ExportCsvAsync Task ExportCsvAsync(selectedOnly) - generates the full (filtered/sorted) data as CSV and triggers a client-side download. Covers all matching rows in every data mode - server/infinite modes fetch them through OnRead/OnLoadMore, tree mode includes collapsed branches - or only the selected rows when selectedOnly is true.
ToCsv string ToCsv(selectedOnly) - builds a CSV string of the full dataset synchronously - tree mode includes collapsed branches, queryable mode covers all pages. Only server/infinite modes are limited to the loaded rows (their providers are async); use ToCsvAsync there.
ToCsvAsync Task<string> ToCsvAsync(selectedOnly) - builds a CSV string of the full dataset (or only the selected rows) - server/infinite modes issue an OnRead/OnLoadMore request with no paging (Take = null), tree mode includes collapsed branches.
ToExcelAsync Task<byte[]> ToExcelAsync(selectedOnly) - generates the full (filtered/sorted) dataset, or only the selected rows, as an Excel workbook (.xlsx). Numbers, booleans and dates land as native cell types, so the sheet can sort, filter and compute on them. The workbook mirrors the grid's layout: a bold frozen header row carrying Excel's own AutoFilter, column widths, leading frozen columns as a freeze pane and ColSpan cells as merged cells; with ExcelExportStyled it also carries the grid's rendered theme (colors, striping, borders, fonts).
ExportExcelAsync Task ExportExcelAsync(selectedOnly) - generates the .xlsx workbook and triggers a client-side download.
ActiveSorts IReadOnlyList<BitDataGridSortDescriptor> [] The active sort descriptors, in priority order.
ActiveFilters IReadOnlyList<BitDataGridFilterDescriptor> [] The active filter descriptors.
ActiveGroups IReadOnlyList<BitDataGridGroupDescriptor> [] The active group descriptors, in nesting order.
TotalCount int 0 Total number of rows in the current (filtered) view; the server-reported total in server mode.
TotalPages int 1 Total number of pages while paging is active.
CurrentPage int 1 The 1-based current page.
ExpandAllAsync Task Expands every node in the tree. No-op outside tree mode.
CollapseAllAsync Task Collapses every node in the tree. No-op outside tree mode.
IsDetailExpanded bool IsDetailExpanded(item) - true when the given row's DetailTemplate content is currently expanded.
ExpandDetailAsync Task ExpandDetailAsync(item) - expands the given row's detail content. No-op without a DetailTemplate.
CollapseDetailAsync Task CollapseDetailAsync(item) - collapses the given row's detail content.
ToggleDetailAsync Task ToggleDetailAsync(item) - expands the given row's detail content when collapsed, and collapses it otherwise.
SetDetailExpandedAsync Task SetDetailExpandedAsync(item, expanded) - expands or collapses a row's detail content.
ExpandAllDetailsAsync Task Expands the detail content of every row of the current view - in local mode every row matching the active filters, not only the rendered page; in server, queryable and infinite modes only the rows loaded so far. Raises OnDetailToggle once per newly expanded row.
CollapseAllDetailsAsync Task Collapses every expanded detail row, raising OnDetailToggle once per row.
EditingItem TItem? null The row currently in inline-edit mode, or null when no edit is open.
EditingColumnId string? null The column of the cell open for editing in Cell mode, or null.
BeginEditAsync Task BeginEditAsync(item, columnId) - opens an edit at a cell and moves the focus into its editor (the whole row in Row mode; in Cell mode only that cell, after committing any other).
BeginEdit void BeginEdit(item) - puts a row into inline-edit mode from code, exactly as its Edit button (or Enter/F2 on a navigable cell) does, snapshotting its values so CancelEditAsync can restore them.
CommitEditAsync Task Commits the open inline edit (writing the buffered values to the row and raising OnRowSave). Refuses while any editor holds an invalid value.
CancelEditAsync Task Abandons the open inline edit, restoring the row to the values it had when the edit began, and raises OnRowCancel.
AddNewRowAsync Task Appends a blank row built by NewItemFactory above the view and opens it for editing, exactly as the toolbar Add button does.
DeleteRowAsync Task DeleteRowAsync(item) - drops the row from the selection and raises OnRowDelete so the caller can remove it from the data source, then refreshes.

BitComponentBase parameters

Name Type Default value Description
AriaLabel string? null Gets or sets the accessible label for the component, used by assistive technologies.
Class string? null Gets or sets the CSS class name(s) to apply to the rendered element.
Dir BitDir? null Gets or sets the text directionality for the component's content.
Disabled bool false Gets or sets a value indicating whether the component is disabled and cannot respond to user interaction.
ForceAnimation bool false Gets or sets a value indicating whether the component's animations play at their full duration even when reduced motion is requested.
HtmlAttributes Dictionary<string, object> new Dictionary<string, object>() Captures additional HTML attributes to be applied to the rendered element, in addition to the component's parameters.
Id string? null Gets or sets the unique identifier for the component's root element.
Style string? null Gets or sets the CSS style string to apply to the rendered element.
TabIndex string? null Gets or sets the tab order index for the component when navigating with the keyboard.
Visibility BitVisibility BitVisibility.Visible Gets or sets the visibility state (visible, hidden, or collapsed) of the component.

BitComponentBase public members

Name Type Default value Description
UniqueId Guid Guid.NewGuid() Gets the readonly unique identifier for the component's root element, assigned when the component instance is constructed.
RootElement ElementReference Gets the reference to the root HTML element associated with this component.

BitDataGridClassStyles properties

Defines per-part CSS class/style values for BitDataGrid.

Name Type Default value Description
Root string? null Custom class or style applied to the root element.
Toolbar string? null Custom class or style applied to the toolbar above the grid.
ColumnChooser string? null Custom class or style applied to the column chooser panel.
Viewport string? null Custom class or style applied to the scrolling viewport that holds the rows.
HeaderRow string? null Custom class or style applied to the row of column titles.
HeaderCell string? null Custom class or style applied to each column header cell (the column's HeaderClass comes after it).
FilterRow string? null Custom class or style applied to the row of column filters.
Row string? null Custom class or style applied to each data row (RowClass / RowStyle come after it).
SelectedRow string? null Custom class or style applied to each selected data row, after Row.
Cell string? null Custom class or style applied to each data cell (the column's CellClass comes after it).
GroupRow string? null Custom class or style applied to the cell of each group header row.
DetailRow string? null Custom class or style applied to the content of each expanded detail row.
FooterRow string? null Custom class or style applied to the footer row of aggregates.
Pager string? null Custom class or style applied to the pager.
Empty string? null Custom class or style applied to the cell that shows the empty message.
Loading string? null Custom class or style applied to the cell that shows the loading indicator.

BitDataGridColumn properties

Defines a column inside a BitDataGrid. Place these as child content of the grid.

Name Type Default value Description
Field string? null Name of the property this column is bound to. Supports nested paths ("Address.City"). Prefer Property for a strongly typed, refactor-safe alternative.
Property Expression<Func<TItem, object?>>? null Typed selector of the property this column is bound to, e.g. Property="p => p.Name". A strongly typed, refactor-safe alternative to Field that supports nested member chains (p => p.Address.City). Takes precedence over Field when both are set.
ColumnId string? null Stable identifier for the column. Defaults to the resolved Property/Field path.
Title string? null Header text. Defaults to a humanized Property/Field name.
Width string? null CSS width, e.g. "120px" or "20%". When null the column shares remaining space.
MinWidth int 60 Minimum width in pixels the column can be resized to.
MaxWidth int? null Maximum width in pixels the column can be resized to.
Sortable bool? null Overrides the grid-level Sortable for this column.
SortBy Func<TItem, object?>? null Custom sort key selector. Enables sorting for template-only columns and overrides the field value as the sort key (client mode).
SortDescendingFirst bool false When true, the first click on the header sorts descending instead of ascending.
AllowUnsorted bool? null Overrides the grid-level AllowUnsorted: whether a third header click returns this column to its unsorted state.
Comparer IComparer<object?>? null Custom comparer applied to this column's sort keys, for orderings the default null-safe value comparer cannot express. Client-side only (server and queryable sources sort at the source).
Validate Func<TItem, object?, string?>? null Validator for inline edits: receives the row and the proposed value, returns an error message to reject it (blocking Save) or null to accept.
Filterable bool? null Overrides the grid-level Filterable for this column.
FilterOperators bool? null Overrides the grid-level FilterOperators (the operator dropdown next to this column's filter editor).
FilterTemplate RenderFragment<BitDataGridFilterContext>? null Replaces this column's built-in filter editor with custom markup (e.g. a multi-select applying In). The context carries the current filter and ApplyAsync/ApplyRangeAsync/ClearAsync.
Resizable bool? null Overrides the grid-level Resizable for this column.
Reorderable bool? null Overrides the grid-level Reorderable for this column.
Editable bool? null Overrides the grid-level Editable for this column.
Groupable bool? null Overrides the grid-level Groupable for this column.
Searchable bool? null Whether the grid's quick-search box searches this column. Defaults to every field-bound (or ExportValue-backed) column.
Exportable bool? null Whether the column is included in CSV/Excel exports. Defaults to every column that has a value to write (a bound field or an ExportValue selector).
ExportValue Func<TItem, object?>? null Value selector used by exports and the clipboard instead of the bound field - the export counterpart of Template. Gives a template-only column a real exported value (numbers and booleans still land in Excel as native cell types).
ShowTooltip bool? null Overrides the grid-level ShowCellTooltips for this column's cells.
WrapText bool? null Overrides the grid-level WrapCellText: lets this column's header and cells wrap onto several lines instead of clipping to one, with the row growing to fit.
Frozen bool false Pins the column to the start edge so it stays visible while scrolling horizontally.
FrozenEnd bool false Pins the column to the end edge (right in LTR, left in RTL). Typical for action/status columns.
Group string? null Optional header group name. Consecutive columns sharing the same value render under a single spanning header cell.
ColSpan Func<TItem, int?>? null Optional per-row column span.
Visible bool true Whether the column is visible.
RowHeader bool false Makes the column's cells the headers of their rows (role rowheader) - the column that names a row. Screen readers announce it as the focus moves between rows, and it names the row's selection checkbox.
Align BitTextAlign BitTextAlign.Start Horizontal alignment of cell content. Only Start, Center, End, Left and Right are honoured: Start and End follow the reading direction, Left and Right stay on the same side of the screen in both, and every other value leaves the column at its leading edge. The Left and Right of the former BitDataGridColumnAlign were the leading and trailing edges, so they map to Start and End.
Format string? null A .NET format string applied to the value (e.g. "C2", "yyyy-MM-dd").
DataType BitDataGridColumnDataType BitDataGridColumnDataType.Auto The data type used to pick the editor/filter.
Aggregate BitDataGridAggregateType BitDataGridAggregateType.None The footer/group aggregate function.
AggregateBy Func<IReadOnlyList<TItem>, object?>? null Custom aggregate function for computations beyond the built-ins (e.g. distinct count). Takes precedence over Aggregate.
AggregateFormat string? null Format string for the aggregate value. Falls back to Format.
HeaderClass string? null Custom CSS class applied to the header cell.
CellClass string? null Custom CSS class applied to each data cell.
CellClassSelector Func<TItem, string?>? null Per-row CSS class for this column's cells, from the row's data (added after CellClass).
CellStyleSelector Func<TItem, string?>? null Per-row inline style for this column's cells, applied last. Prefer color/font over background, which would hide the selection and hover states.
Template RenderFragment<TItem>? null Custom rendering for a data cell.
HeaderTemplate RenderFragment? null Custom rendering for the header cell content.
EditTemplate RenderFragment<TItem>? null Custom editor rendered when the row/cell is in edit mode.
FooterTemplate RenderFragment<BitDataGridAggregateResult>? null Custom rendering for the footer/aggregate cell.

BitDataGridReadRequest properties

Describes the data the grid needs from a server-side/infinite source (passed to OnRead/OnLoadMore).

Name Type Default value Description
Skip int 0 Zero-based number of items to skip.
Take int? null Maximum number of items to return (null means all).
Sorts IReadOnlyList<BitDataGridSortDescriptor> [] The active sort descriptors ordered by priority.
Filters IReadOnlyList<BitDataGridFilterDescriptor> [] The active filter descriptors.
Groups IReadOnlyList<BitDataGridGroupDescriptor> [] The active group descriptors in nesting order, letting a server-side handler reconstruct the grouping. Empty when no grouping is active.
Search string? null The grid-wide quick-search term, or null when no search is active. A free-text term to match across the columns the handler considers searchable, in addition to the per-column Filters.
CancellationToken CancellationToken A token that is cancelled when the request is superseded by a newer one.

BitDataGridReadResult<TItem> properties

Result returned from a grid's OnRead/OnLoadMore callback.

Name Type Default value Description
Items IReadOnlyList<TItem> The items for the current page/window.
TotalCount int The total number of items matching the current filters (ignored in infinite mode).
Aggregates IReadOnlyList<BitDataGridAggregateResult>? null Optional aggregates computed by the data source over the whole filtered dataset; when provided, the footer shows these instead of aggregating the current page locally.

BitDataGridCellEventArgs<TItem> properties

Arguments passed to cell-level event callbacks.

Name Type Default value Description
Item TItem The row item.
Column BitDataGridColumn<TItem> The column the cell belongs to.
ColumnId string The column field/identifier.
ColumnTitle string The column's display title.
Value object? null The raw value of the cell.
Mouse MouseEventArgs The underlying browser mouse event.

BitDataGridDetailEventArgs<TItem> properties

Arguments raised when a row's master-detail content is expanded or collapsed.

Name Type Default value Description
Item TItem The row whose detail content was toggled.
Expanded bool True when the detail content was expanded, false when it was collapsed.

BitDataGridRowReorderEventArgs<TItem> properties

Arguments raised when a row is reordered via drag-and-drop.

Name Type Default value Description
DraggedItem TItem The dragged row item.
TargetItem TItem The drop-target row item.
FromIndex int? The original index of the dragged item, or null when the bound Items is not an indexable list.
ToIndex int? The destination index, or null when the bound Items is not an indexable list.

BitDataGridSortDescriptor properties

Describes the sort state applied to a single column (found on BitDataGridReadRequest.Sorts).

Name Type Default value Description
ColumnId string The identifier of the column being sorted.
Direction BitDataGridSortDirection BitDataGridSortDirection.Ascending The sort direction.
Priority int int.MaxValue Priority for multi-column sorting (1 = primary).

BitDataGridFilterDescriptor properties

Describes a filter applied to a single column (found on BitDataGridReadRequest.Filters).

Name Type Default value Description
ColumnId string The identifier of the column being filtered.
Operator BitDataGridFilterOperator BitDataGridFilterOperator.Unspecified The comparison operator applied to the value. Unspecified applies no filter.
Value object? null The value compared against the column's cell value; a collection for In/NotIn.

BitDataGridFilterContext properties

The context of a column's FilterTemplate: the column's current filter and the calls that change it, through the same pipeline as the built-in editors.

Name Type Default value Description
ColumnId string The identifier of the column being filtered.
Title string The column's header text.
Label string The accessible name for the editor ("Filter by {Title}"); put it on the control's aria-label.
ValueType Type? null The type of the column's bound member, Nullable<T> unwrapped.
Disabled bool Whether the grid is disabled; disable the editor when it is.
Filters IReadOnlyList<BitDataGridFilterDescriptor> The descriptors applied to the column: none, one, or the two halves of a range.
IsActive bool Whether any filter is applied to the column.
Operator BitDataGridFilterOperator The operator of the column's (first) filter, or Unspecified.
Value object? The value of the column's (first) filter, or null.
ApplyAsync Task (BitDataGridFilterOperator, object?) Replaces the column's filter; a null, blank or empty-set value clears it.
ApplyRangeAsync Task (object?, object?) Replaces the column's filter with a half-open range (>= from AND < toExclusive).
ClearAsync Task () Removes the column's filter.

BitDataGridGroupDescriptor properties

Describes a grouping applied to a column.

Name Type Default value Description
ColumnId string The identifier of the column being grouped.
Direction BitDataGridSortDirection BitDataGridSortDirection.Ascending The sort direction applied to the group keys.

BitDataGridAggregateResult properties

Holds the computed aggregate value for a column footer or group (passed to a column's FooterTemplate).

Name Type Default value Description
ColumnId string The identifier of the aggregated column.
Type BitDataGridAggregateType The aggregate function that produced the value.
Value object? null The raw aggregate value.
FormattedValue string string.Empty The aggregate value formatted using the column's AggregateFormat/Format.

BitDataGridState properties

A serializable snapshot of the grid's user-adjustable state, captured with GetState() and restored with ApplyStateAsync(). Enables persisting grid state across sessions.

Name Type Default value Description
CurrentPage int 1 The 1-based current page.
PageSize int? null The user-selected page size, or null when the grid's PageSize parameter applies.
Search string? null The grid-wide quick-search term, or null when no search was active.
Sorts List<BitDataGridSortDescriptor> [] The active sort descriptors.
Filters List<BitDataGridFilterDescriptor> [] The active filter descriptors.
Groups List<BitDataGridGroupDescriptor> [] The active group descriptors.
GroupsCollapsed bool false Whether groups were collapsed by default when the snapshot was taken.
GroupExpansionOverrides List<string> [] The groups whose expanded state differed from GroupsCollapsed, by their stable paths - so a restored view opens exactly the groups the user had open. Tree-node expansion is not captured (a tree key is not guaranteed to be serializable).
Columns List<BitDataGridColumnState> [] Per-column layout state.

BitDataGridColumnState properties

A per-column layout entry inside BitDataGridState.Columns.

Name Type Default value Description
ColumnId string string.Empty The column's stable identifier (ColumnId or Field).
Visible bool true Whether the column is shown (column-chooser state).
Width double? null The resized width in pixels, or null when the column was never resized.
Order int 0 The display position among all columns.

BitDataGridStrings properties

All user-visible (and screen-reader) strings rendered by the grid, defaulting to English. Assign a customized instance to the Strings parameter to localize - including empty/loading texts, pager texts, filter placeholders and operators, edit buttons, aggregate labels, aria-labels and live-region announcements.

Name Type Default value Description
GridLabel string "Data grid" Default accessible name of the grid element, used when no AriaLabel is given.
EmptyText string "No records to display." Shown when the grid has no rows to display.
LoadingText string "Loading…" Shown while Loading is true.
PagerRangeFormat string "{0}–{1} of {2}" Pager range summary format.
PagerPageFormat string "Page {0} of {1}" Pager page summary format.
InvalidValueError string "Invalid value for {0}." Error shown when an edited value can't be converted to the column's type.
SearchPlaceholder string "Search…" Placeholder of the toolbar's quick-search box.
… string Plus 86 more: toolbar/edit button texts, search and column-chooser labels, the no-matches text, filter placeholders and operator labels, boolean/enum option texts, the names of the special columns, group/detail/tree/reorder/resize/move labels and tooltips, the sort priority, aggregate label formats and aria-live announcements.

BitTextAlign enum

Name Value Description
Start 0 Aligns to the leading edge of the text, whichever direction it runs in.
End 1 Aligns to the trailing edge of the text, whichever direction it runs in.
Left 2 Aligns to the left edge, whichever direction the text runs in.
Right 3 Aligns to the right edge, whichever direction the text runs in.
Center 4 Centers the lines inside the box.
Justify 5 Spaces the words of every line but the last so that both edges line up.
JustifyAll 6 Justifies the last line as well. No browser engine implements it yet.
MatchParent 7 Inherits the alignment, resolving a start or an end against the direction of the parent.
Inherit 8 Takes the alignment of the parent.
Initial 9 Takes the initial value of the property.
Revert 10 Reverts to the value the user agent or the user stylesheet sets.
RevertLayer 11 Reverts to the value of the previous cascade layer.
Unset 12 Inherits the alignment, or takes the initial value where it is not inherited.

BitDataGridSortDirection enum

Name Value Description
None 0
Ascending 1
Descending 2

BitDataGridEditMode enum

Name Value Description
Row 0 The whole row opens at once, with Save/Cancel in the command column.
Cell 1 One cell opens at a time; Enter, Tab (opening the next) or moving the focus out commits it, Escape cancels.

BitSelectionMode enum

Name Value Description
None 0 Nothing can be selected: the items act as plain content or as plain action buttons.
Single 1 At most one item can be selected at a time.
Multiple 2 Any number of items can be selected at the same time.

BitDataGridAggregateType enum

Name Value Description
None 0
Sum 1
Average 2
Count 3
Min 4
Max 5
Custom 6 The value was produced by the column's custom AggregateBy delegate rather than a built-in function.

BitPlacement enum

Name Value Description
Top 0 The top edge.
Bottom 1 The bottom edge.
Start 2 The edge the reading direction starts from - the left in LTR, the right in RTL. On the vertical axis, which does not turn around, it is the top.
End 3 The edge the reading direction ends at - the right in LTR, the left in RTL. On the vertical axis, which does not turn around, it is the bottom.
Left 4 The left edge, in both reading directions.
Right 5 The right edge, in both reading directions.
Center 6 The middle of the axis, against neither edge.
TopAndBottom 7 Both edges of the block axis at once.
StartAndEnd 8 Both edges of the inline axis at once, following the reading direction the way Start and End do.

BitDataGridColumnDataType enum

Name Value Description
Auto 0
Text 1
Number 2
Boolean 3
Date 4
DateTime 5
DateTimeOffset 6
Enum 7

BitDataGridFilterOperator enum

Name Value Description
Unspecified 0
Contains 1
DoesNotContain 2
StartsWith 3
EndsWith 4
Equals 5
NotEquals 6
GreaterThan 7
GreaterThanOrEqual 8
LessThan 9
LessThanOrEqual 10
IsEmpty 11
IsNotEmpty 12
In 13 Equals any member of the collection in Value.
NotIn 14 Equals no member of the collection in Value.

BitVisibility enum

Name Value Description
Visible 0 The content of the component is visible.
Hidden 1 The content of the component is hidden, but the space it takes on the page remains (visibility:hidden).
Collapsed 2 The component is hidden (display:none).

BitDir enum

Name Value Description
Ltr 0 Ltr (left to right) is to be used for languages that are written from the left to the right (like English).
Rtl 1 Rtl (right to left) is to be used for languages that are written from the right to the left (like Arabic).
Auto 2 Auto lets the user agent decide. It uses a basic algorithm as it parses the characters inside the element until it finds a character with a strong directionality, then applies that directionality to the whole element.

Feedback

Found a mistake, a gap, or something that could be clearer? Every page and every component is one click from its source.