From dbea37697d3a5947c0240de29b1226136008cd74 Mon Sep 17 00:00:00 2001 From: SvetlanaMikheeva <80316217+SvetlanaMikheeva@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:08:29 +0400 Subject: [PATCH 1/5] add readme and enable filtering --- .../BindGridToLargeData.csproj | 2 +- .../Components/Pages/Index.razor | 9 +++-- README.md | 33 +++++++++++------- bind-to-devextreme-data-source.png | Bin 0 -> 40907 bytes 4 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 bind-to-devextreme-data-source.png diff --git a/CS/BindGridToLargeData/BindGridToLargeData.csproj b/CS/BindGridToLargeData/BindGridToLargeData.csproj index 7617ba0..25cb2a2 100644 --- a/CS/BindGridToLargeData/BindGridToLargeData.csproj +++ b/CS/BindGridToLargeData/BindGridToLargeData.csproj @@ -5,7 +5,7 @@ enable - + diff --git a/CS/BindGridToLargeData/Components/Pages/Index.razor b/CS/BindGridToLargeData/Components/Pages/Index.razor index 9218c47..90d831c 100644 --- a/CS/BindGridToLargeData/Components/Pages/Index.razor +++ b/CS/BindGridToLargeData/Components/Pages/Index.razor @@ -7,12 +7,15 @@ @rendermode InteractiveServer
- + - @@ -31,4 +34,4 @@ public void Dispose() { Northwind?.Dispose(); } -} \ No newline at end of file +} diff --git a/README.md b/README.md index 38218b1..57ef097 100644 --- a/README.md +++ b/README.md @@ -3,31 +3,38 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) -# Product/Platform - Task +# Grid for Blazor - How to bind the component to DevExtreme data source with Entity Framework Core -This is the repository template for creating new examples. Describe the solved task here. +This example uses [Entity Framework Core](https://learn.microsoft.com/en-us/ef/core/) data access technology to bind the [DevExpress Blazor Grid](https://docs.devexpress.com/Blazor/403143/components/grid) component to a [GridDevExtremeDataSource](https://docs.devexpress.com/Blazor/DevExpress.Blazor.GridDevExtremeDataSource-1). -Put a screenshot that illustrates the result here. +![Bind the Grid to a DevExtreme Data Source](bind-to-devextreme-data-source.png) -Then, add implementation details (steps, code snippets, and other technical information in a free form), or add a link to an existing document with implementation details. +You can use the [GridDevExtremeDataSource](https://docs.devexpress.com/Blazor/DevExpress.Blazor.GridDevExtremeDataSource-1) class to bind the DevExpress Blazor Grid to a large [IQueryable](https://learn.microsoft.com/en-us/dotnet/api/system.linq.iqueryable-1) data collection. This data source implementation is based on our [DevExtreme.AspNet.Data](https://github.com/DevExpress/DevExtreme.AspNet.Data) library. When you use this data source, the Grid delegates data filtering operations to an underlying query provider (such as [EF Core](https://learn.microsoft.com/en-us/ef/core/)) and only loads data required for screen display. This technique optimizes performance and reduces overall memory consumption. + +To use this data source in your next Blazor project, create a [GridDevExtremeDataSource](https://docs.devexpress.com/Blazor/DevExpress.Blazor.GridDevExtremeDataSource-1) class instance and pass your [IQueryable](https://learn.microsoft.com/en-us/dotnet/api/system.linq.iqueryable-1) data collection as the constructor parameter. Once complete, assign this instance to the Grid's Data property. + +Refer to the following help topic for more information about this data source, its specifics, and limitations: [Bind Blazor Grid to Data](https://docs.devexpress.com/Blazor/403737/components/grid/bind-to-data#large-data-queryable-collections). ## Files to Review -- link.cs (VB: link.vb) -- link.js -- ... +- [Index.razor](./CS/BindGridToLargeData/Components/Pages/Index.razor) +- [Index.razor.css](./CS/BindGridToLargeData/Components/Pages/Index.razor.css) +- [Invoice.cs](./CS/BindGridToLargeData/Models/Invoice.cs) +- [NorthwindContext.cs](./CS/BindGridToLargeData/Models/NorthwindContext.cs) +- [Program.cs](./CS/BindGridToLargeData/Program.cs) ## Documentation -- link -- link -- ... +- [Bind Blazor Grid to Data](https://docs.devexpress.com/Blazor/403737/components/grid/bind-to-data) +- [Bind Components to Data with Entity Framework Core](https://docs.devexpress.com/Blazor/403167/common-concepts/data-binding/bind-components-to-data-with-entity-framework-core) ## More Examples -- link -- link -- ... +- [How to bind the Grid to a DataTable object](https://github.com/DevExpress-Examples/blazor-grid-bind-to-datatable-object) +- [How to bind the Grid to data with Entity Framework Core](https://github.com/DevExpress-Examples/blazor-dxgrid-bind-to-data-with-entity-framework-core) +- [How to bind the Grid to an Instant Feedback data source and enable edit operations](https://github.com/DevExpress-Examples/blazor-dxgrid-bind-to-instant-feedback-data-source) +- [How to bind the Grid to a Web API service](https://github.com/DevExpress-Examples/blazor-DxGrid-Bind-To-Web-Api-Service) + ## Does this example address your development requirements/objectives? diff --git a/bind-to-devextreme-data-source.png b/bind-to-devextreme-data-source.png new file mode 100644 index 0000000000000000000000000000000000000000..88848d1592ff1ce933f665d2550e055c096a5be9 GIT binary patch literal 40907 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 literal 0 HcmV?d00001 From ecd4ae43987f5f433690ea2417299666278c84b3 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Fri, 13 Dec 2024 09:10:53 +0200 Subject: [PATCH 2/5] Created a new file vale.yml [skip ci] --- .github/workflows/vale.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/vale.yml diff --git a/.github/workflows/vale.yml b/.github/workflows/vale.yml new file mode 100644 index 0000000..068c35b --- /dev/null +++ b/.github/workflows/vale.yml @@ -0,0 +1,28 @@ +name: vale-validation +on: + pull_request: + paths: + - README.md + +jobs: + vale: + name: runner / vale + runs-on: ubuntu-latest + steps: + - name: clone repo + uses: actions/checkout@v4 + - name: clone vale-styles repo + uses: actions/checkout@v4 + with: + repository: DevExpress/vale-styles + path: vale-styles + ssh-key: ${{ secrets.VALE_STYLES_ACCESS_KEY }} + - name: copy vale rules to the root repo + run: shopt -s dotglob && cp -r ./vale-styles/vale/* . + - name: vale linter check + uses: DevExpress/vale-action@reviewdog + with: + files: README.md + fail_on_error: true + filter_mode: nofilter + reporter: github-check From 97f2a1a54ba7e3ed5541bb12efa4aa6c842e755b Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Fri, 13 Dec 2024 11:10:56 +0400 Subject: [PATCH 3/5] README auto update [skip ci] --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 57ef097..63cd206 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -[![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T1026838) +[![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T1268112) [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) @@ -38,7 +38,7 @@ Refer to the following help topic for more information about this data source, i ## Does this example address your development requirements/objectives? -[](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=example-repository-template&~~~was_helpful=yes) [](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=example-repository-template&~~~was_helpful=no) +[](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=blazor-dxgrid-bind-to-devextreme-data-source&~~~was_helpful=yes) [](https://www.devexpress.com/support/examples/survey.xml?utm_source=github&utm_campaign=blazor-dxgrid-bind-to-devextreme-data-source&~~~was_helpful=no) (you will be redirected to DevExpress.com to submit your response) From fb54c459c3c6241b30b87f7793a4d285bf2352e1 Mon Sep 17 00:00:00 2001 From: SvetlanaMikheeva <80316217+SvetlanaMikheeva@users.noreply.github.com> Date: Fri, 13 Dec 2024 12:30:32 +0400 Subject: [PATCH 4/5] delete unnecessary files --- .../Components/Layout/NavMenu.razor | 3 +- .../Components/Pages/Weather.razor | 35 ------------------- CS/BindGridToLargeData/Program.cs | 2 -- .../Services/WeatherForecast.cs | 11 ------ .../Services/WeatherForecastService.cs | 17 --------- 5 files changed, 1 insertion(+), 67 deletions(-) delete mode 100644 CS/BindGridToLargeData/Components/Pages/Weather.razor delete mode 100644 CS/BindGridToLargeData/Services/WeatherForecast.cs delete mode 100644 CS/BindGridToLargeData/Services/WeatherForecastService.cs diff --git a/CS/BindGridToLargeData/Components/Layout/NavMenu.razor b/CS/BindGridToLargeData/Components/Layout/NavMenu.razor index b29d03f..d8183b0 100644 --- a/CS/BindGridToLargeData/Components/Layout/NavMenu.razor +++ b/CS/BindGridToLargeData/Components/Layout/NavMenu.razor @@ -2,7 +2,6 @@ - -
\ No newline at end of file + diff --git a/CS/BindGridToLargeData/Components/Pages/Weather.razor b/CS/BindGridToLargeData/Components/Pages/Weather.razor deleted file mode 100644 index 7b1bc37..0000000 --- a/CS/BindGridToLargeData/Components/Pages/Weather.razor +++ /dev/null @@ -1,35 +0,0 @@ -@page "/weather" - -@using BindGridToLargeData.Services -@attribute [StreamRendering(true)] -@rendermode InteractiveServer -@inject WeatherForecastService ForecastService - -Weather -

Weather

- -@if (forecasts == null) -{ -

Loading...

-} -else -{ - - - - - - - - -} - -@code { - private WeatherForecast[]? forecasts; - - protected override async Task OnInitializedAsync() - { - forecasts = await ForecastService.GetForecastAsync(DateOnly.FromDateTime(DateTime.Now)); - } -} \ No newline at end of file diff --git a/CS/BindGridToLargeData/Program.cs b/CS/BindGridToLargeData/Program.cs index cb1a2c5..26da60d 100644 --- a/CS/BindGridToLargeData/Program.cs +++ b/CS/BindGridToLargeData/Program.cs @@ -1,6 +1,5 @@ using BindGridToLargeData.Components; using BindGridToLargeData.Models; -using BindGridToLargeData.Services; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); @@ -19,7 +18,6 @@ var dbPath = Path.Combine(env.ContentRootPath, "Northwind.db"); options.UseSqlite("Data Source=" + dbPath); }); -builder.Services.AddSingleton(); builder.Services.AddMvc(); var app = builder.Build(); diff --git a/CS/BindGridToLargeData/Services/WeatherForecast.cs b/CS/BindGridToLargeData/Services/WeatherForecast.cs deleted file mode 100644 index f87eb5e..0000000 --- a/CS/BindGridToLargeData/Services/WeatherForecast.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace BindGridToLargeData.Services { - public class WeatherForecast { - public DateOnly Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } - } -} \ No newline at end of file diff --git a/CS/BindGridToLargeData/Services/WeatherForecastService.cs b/CS/BindGridToLargeData/Services/WeatherForecastService.cs deleted file mode 100644 index 52318c4..0000000 --- a/CS/BindGridToLargeData/Services/WeatherForecastService.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace BindGridToLargeData.Services { - public class WeatherForecastService { - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - public Task GetForecastAsync(DateOnly startDate) { - var rng = new Random(); - return Task.FromResult(Enumerable.Range(1, 20).Select(index => new WeatherForecast { - Date = startDate.AddDays(index), - TemperatureC = rng.Next(-20, 55), - Summary = Summaries[rng.Next(Summaries.Length)] - }).ToArray()); - } - } -} \ No newline at end of file From a9f4e31e719e4ab271d9c866e90b3dff6d40a209 Mon Sep 17 00:00:00 2001 From: SvetlanaMikheeva <80316217+SvetlanaMikheeva@users.noreply.github.com> Date: Fri, 13 Dec 2024 15:58:23 +0400 Subject: [PATCH 5/5] Update README.md Co-authored-by: DirkPieterse --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63cd206..4d1dcf2 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) -# Grid for Blazor - How to bind the component to DevExtreme data source with Entity Framework Core +# Grid for Blazor - How to bind the component to a DevExtreme data source with Entity Framework Core This example uses [Entity Framework Core](https://learn.microsoft.com/en-us/ef/core/) data access technology to bind the [DevExpress Blazor Grid](https://docs.devexpress.com/Blazor/403143/components/grid) component to a [GridDevExtremeDataSource](https://docs.devexpress.com/Blazor/DevExpress.Blazor.GridDevExtremeDataSource-1).