Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/SveNord/Sve-Blazor-DataTable


https://github.com/SveNord/Sve-Blazor-DataTable

Last synced: about 2 months ago
JSON representation

Awesome Lists containing this project

README

        

# Sve-Blazor-DataTable

Blazor DataTable component with support for client/server side paging, filtering and sorting, build on top of bootstrap 4.

![Main gif](/Sve-Blazor-DataTable-Examples/Content/Main.gif)

## Important Notice
This project is still under active development! Currently an alpha version is available on NuGet, but keep in mind that a later version might contain breaking changes. Make sure to always check the [Changelog](CHANGELOG.md) for more information.

```
### Planned work:

- [] Code cleanup
- [] Better documentation
- [] Test cases
- [] Performance tests
- [] Memory consumption tests
- [] CPU usage tests
```

### Installation
1. Install the [NuGet](https://www.nuget.org/packages/Sve.Blazor.DataTable/) package:

```
> dotnet add package Sve.Blazor.DataTable

OR

PM> Install-Package Sve.Blazor.DataTable
```
Use the `--version` option to specify a specific version to install.

Or use the build in NuGet package manager of your favorite IDEA. Simply search for `Sve.Blazor.DataTable`, select a version and hit install.

2. Import the components:

Add the following using statement `@using Sve.Blazor.DataTable.Components` to one of the following:
- For global import add it to your `_Imports.razor` file
- For a scoped import add it to your desired Blazor component

3. Reference js interop file:

Add `` to your _Host.cshtml or your index.html

## Usage

### DataTable properties

Name
Type
Default
Description

Items
IList
List
The list of items to display

UsePaging
bool
false
Boolean indicating whether to use paging or not

PageNr
int
1
The number of the current page (only applicable when property UsePaging is true)

PageSize
int
10
The amount of items shown on a page (only applicable when property UsePaging is true)

PageCount
int
1
The total amount of pages (only applicable when property UsePaging is true)

FetchData
Func<RequestArgs, Task>?
null
The method used for fetching and manipulating data (paging, filtering, sorting) on the server. When this method is null, all these actions will be performed on the initial dataset on the client.

ShowHeaderFilters
bool
true
Indicates whether or not to show the header/grid filters

AllowRowSelection
bool
false
Indicates whether or not it's possible to select a row

RowClickedEvent
EventCallback
null
The callback for when a row is clicked (only applicable when property AllowRowSelection is true)

SelectedItem
TModel
null
The selected item

SelectedItemCssClass
string
bg-info
The css class for the selected row

EmptyGridText
string
"No records to show"
The text to show when the Items list is empty

IsLoading
bool
false
Indicates whether or not data is being fetched, used to show a spinner

Id
string
""
The html identifier of the table tag

ContainerCssClass
string
"table-responsive"
The css class for the container/parent tag of the table

CssClass
string
"table"
The css class for the table tag

ApplyButtonCssClass
string
""
The css class for the "apply" buttons on grid/header filters

InputCssClass
string
""
The css class for the input tags in the grid/header filters

Styles
TableStyle [Enum FLAGS]
null
The style flags used for the table

TableAttributes
Dictionary<string, object>?
null
Any custom attributes for the table tag (see Blazor docs for more info)

RowAttributes
Dictionary<string, object>?
null
Any custom attributes for the rows (see Blazor docs for more info)

ContainerHeight
int
300
The height of the table container in pixels

ContainerHeightUnit
CssUnit
CssUnit.Px
The unit of the container height

IncludeAdvancedFilters
bool
true
Indicates whether to allow advanced filtering or not

IncludeHeaderFilters
bool
false
Indicates whether or not to include grid/header filters

IncludeSearchButton
bool
false
Indicates whether or not to include a search icon. When clicked filters, sorting and paging is performed on the server is FetchData has a value otherwise it happens on the client

IncludeToggleFilters
bool
false
Indicates whether or not to include a toggle icon. When clicked header/grid filters will re or disappear (only applicable when property

SearchOnApplyHeaderFilter
bool
true
Indicates whether or not a search is instantly triggered when a header/grid filter is applied

AutoAddFilterWhenClickedAndNoneActive
bool
true
Indicates whether or not to add an empty filter rule when a filterable column is clicked an no other filter rules exist.

ItemHeight
int?
null
The pixel height of a an item (tr) in the grid. Customize this to get better virtualization.

### DataTableColumn properties

Name
Type
Default
Description

Property
Expression<Func<TModel, object>>?
null
The selector of a field/property of TModel to use for the column

IsSortable
bool
false
Indicates whether or not sorting is enabled for this column

IsFilterable
bool
false
Indicates whether or not filtering is enabled for this column

IsResizable
bool
false
Indicates whether the column is resizable


IsVisible
bool
true
Indicates whether the column should be rendered

CustomTitle
string
null
The name of the column header (by default the name of the property is used)

HeaderTemplate
RenderFragment<string>
null
The template to use for the grid header, the string is the name of the column

Id
string
""
The html identifier of the table tag

ContainerCssClass
string
"table-responsive"
The css class for the container/parent tag of the table

CssClass
string
"table"
The css class for the table tag

IsDefaultSortColumn
bool
false
Indicates whether or not this column is sorted on by default

DefaultSortDirection
SortDirection [Enum]
SortDirection.Ascending
The sort direction of the default sorting column

TextAlignment
TextAlignment [Enum]
TextAlignment.Left
The text alignment for the column

VerticalAlignment
VerticalAlignment [Enum]
VerticalAlignment.Bottom
The vertical alignment for the column

Styles
TableStyle [Enum FLAGS]
null
The style flags used for the table

Attributes
Dictionary<string, object>?
null
Any custom attributes for the table tag (see Blazor docs for more info)

HeaderFilterAttributes
Dictionary<string, object>?
null
Any custom attributes for the header inputs

ContainerHeight
int
300
The height of the table container in pixels

MinWidthHeader
int
10
The height of the table container in the set units (default vw)

MinWidthHeaderUnit
CssUnit
CssUnit.Vw
The unit of the minWidthHeader property

IncludeHeaderFilter
bool
false
Indicates whether or not to add header/grid filters

IncludeSearchButton
bool
false
Indicates whether or not to include a search icon. When clicked filters, sorting and paging is performed on the server is FetchData has a value otherwise it happens on the client

IncludeToggleFilters
bool
false
Indicates whether or not to include a toggle icon. When clicked header/grid filters will re or disappear (only applicable when property

SearchOnApplyHeaderFilter
bool
false
Indicates whether or not a search is instantly triggered when a header/grid filter is applied

AutoAddFilterWhenClickedAndNoneActive
bool
true
Indicates whether or not to add an empty filter rule when a filterable column is clicked an no other filter rules exist.

RowTemplate
RenderFragment?
null
The custom render fragment to use for the column

RowAttributes
Dictionary<string, object>?
null
Any custom attributes for the rows (see Blazor docs for more info)

ContainerHeight
int
300
The height of the table container in pixels

MaxWidth
int
100
The max width in pixels of a column

MaxWidthUnit
CssUnit
CssUnit.Px
The unit of the MaxWidth property

DateTimeFormat
DateTimeFormat
DateTimeFormat.Date
The DateTimeFormat to use in header/grid filters

IsHeaderVisible
bool
true
Indicates whether the column is visible or not

IncludeAdvancedFilters
bool
false
Indicates whether to allow advanced filtering or not

IncludeSearchButton
bool
false
Indicates whether or not to include a search icon. When clicked filters, sorting and paging is performed on the server is FetchData has a value otherwise it happens on the client

IncludeToggleFilters
bool
false
Indicates whether or not to include a toggle icon. When clicked header/grid filters will re or disappear (only applicable when property

SearchOnApplyHeaderFilter
bool
false
Indicates whether or not a search is instantly triggered when a header/grid filter is applied

AutoAddFilterWhenClickedAndNoneActive
bool
true
Indicates whether or not to add an empty filter rule when a filterable column is clicked an no other filter rules exist.

### Basic table

```cs







```
![Basic example](/Sve-Blazor-DataTable-Examples/Content/BasicExample.PNG)




### Custom template

```cs









@if (forecast.UpdatedRecently)
{

}
else
{

}

```

![Template example](Sve-Blazor-DataTable-Examples/Content/CustomTemplateExample.PNG)




### Sorting

```cs







```

![Sorting example](/Sve-Blazor-DataTable-Examples/Content/SortingExample.gif)




### Pagination

```cs







```

![Paging example](/Sve-Blazor-DataTable-Examples/Content/PagingExample.gif)




### Filtering

```cs









```

![Filtering example](/Sve-Blazor-DataTable-Examples/Content/FilteringExample.gif)




### Header/Grid filters

```cs









```

![Header filtering example](/Sve-Blazor-DataTable-Examples/Content/HeaderFilteringExample.gif)




### Out of the box Virtualization

```cs



@(Array.IndexOf(forecasts, forecast) + 1)










```

![Virtualization example](/Sve-Blazor-DataTable-Examples/Content/VirtualizationExample.gif)




### Server side support

```cs







// Method will be called by the DataTable when necessary
private async Task DoFetchData(RequestArgs args)
{
pagedForecasts = await ForecastService.SearchForecastAsync(args);
// Don't forget to call StateHasChanged() since your component is the owner of the DataTable
StateHasChanged();
}

// ForecastService:
public async Task SearchForecastAsync(RequestArgs args)
{
IQueryable result = context.Forecasts.AsQueryable();

// RequestArgs contains all the information about sorting, paging and filtering
foreach (var filter in args.AppliedFilters)
{
// Filters can easily be translated into expressions,
// or use the filtering info to create your own filtering solution
result = result.Where(filter.GenerateExpression());
}

// Use the Core.Utils to easily apply paging and sorting
// Or use the paging info in RequestArgs to build your own paging solution
pagedResult = Sve.Blazor.Core.Utils.ApplyPaging(result, pager);

return Task.FromResult(pagedResult);
}
```

![Server side example](/Sve-Blazor-DataTable-Examples/Content/ServerSideExample.gif)




### Support bootstrap table styles

```cs

....

```

![Small table example](/Sve-Blazor-DataTable-Examples/Content/SmallTableExample.PNG)



```cs

....

```

![Bordered table example](/Sve-Blazor-DataTable-Examples/Content/BorderedTableExample.PNG)




```cs

....

```

![Borderless table example](/Sve-Blazor-DataTable-Examples/Content/BorderlessTableExample.PNG)




```cs

....

```

![Dark table example](/Sve-Blazor-DataTable-Examples/Content/DarkTableExample.PNG)




```cs

....

```

![Hoverable table example](/Sve-Blazor-DataTable-Examples/Content/HoverableTableExample.PNG)




```cs

....

```

![Striped table example](/Sve-Blazor-DataTable-Examples/Content/StripedTableExample.PNG)




### Alignment

```cs





```

![Alignment example](/Sve-Blazor-DataTable-Examples/Content/AlignmentExample.PNG)




## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details