Skip to content

Commit c19b245

Browse files
Merge branch 'hotfix/hotfix-v30.1.37' into 964808-Remove-TFM
2 parents d2e53a5 + ea7ed68 commit c19b245

13 files changed

+626
-15
lines changed

blazor-toc.html

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

blazor/Release-Notes/30.1.39.md

Lines changed: 88 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,96 @@ documentation: ug
77

88
# Essential Studio for Blazor Release Notes
99

10-
{% include release-info.html date="July 08, 2025" version="v30.1.39" %}
10+
{% include release-info.html date="July 08, 2025" version="v30.1.39" passed="179634" failed="0" %}
1111

1212
{% directory path: _includes/release-notes/v30.1.39 %}
1313

1414
{% include {{file.url}} %}
1515

16-
{% enddirectory %}
16+
{% enddirectory %}
17+
18+
## Test Results
19+
20+
| Component Name | Test Cases | Passed | Failed | Remarks |
21+
|---------------|------------|--------|--------|---------|
22+
| 3DChart | 202 | 202 | 0 | All Passed |
23+
| Accordion | 232 | 232 | 0 | All Passed |
24+
| AiAssistView | 290 | 290 | 0 | All Passed |
25+
| Appbar | 102 | 102 | 0 | All Passed |
26+
| Autocomplete | 444 | 444 | 0 | All Passed |
27+
| Bulletchart | 237 | 237 | 0 | All Passed |
28+
| Button | 255 | 255 | 0 | All Passed |
29+
| Calendar | 146 | 146 | 0 | All Passed |
30+
| Carousel | 174 | 174 | 0 | All Passed |
31+
| Charts | 3730 | 3730 | 0 | All Passed |
32+
| ChatUI | 102 | 102 | 0 | All Passed |
33+
| Chips | 196 | 196 | 0 | All Passed |
34+
| CircularGauge | 927 | 927 | 0 | All Passed |
35+
| ColorPicker | 113 | 113 | 0 | All Passed |
36+
| ComboBox | 568 | 568 | 0 | All Passed |
37+
| DashboardLayout | 242 | 242 | 0 | All Passed |
38+
| DataForm | 537 | 537 | 0 | All Passed |
39+
| DataGrid | 4750 | 4750 | 0 | All Passed |
40+
| DatePicker | 570 | 570 | 0 | All Passed |
41+
| DateRangePicker | 364 | 364 | 0 | All Passed |
42+
| DateTimePicker | 473 | 473 | 0 | All Passed |
43+
| Diagram | 10094 | 10094 | 0 | All Passed |
44+
| Dialog | 388 | 388 | 0 | All Passed |
45+
| DocumentEditor | 3234 | 3234 | 0 | All Passed |
46+
| DropdownList | 848 | 848 | 0 | All Passed |
47+
| Dropdowntree | 131 | 131 | 0 | All Passed |
48+
| FileManager | 3059 | 3059 | 0 | All Passed |
49+
| FileUpload | 328 | 328 | 0 | All Passed |
50+
| FloatingActionButton | 128 | 128 | 0 | All Passed |
51+
| Gantt | 4377 | 4377 | 0 | All Passed |
52+
| HeatMap | 339 | 339 | 0 | All Passed |
53+
| ImageEditor | 3561 | 3561 | 0 | All Passed |
54+
| InPlaceEditor | 763 | 763 | 0 | All Passed |
55+
| InputMask | 168 | 168 | 0 | All Passed |
56+
| LinearGauge | 799 | 799 | 0 | All Passed |
57+
| ListBox | 138 | 138 | 0 | All Passed |
58+
| ListView | 439 | 439 | 0 | All Passed |
59+
| Maps | 1578 | 1578 | 0 | All Passed |
60+
| Mention | 146 | 146 | 0 | All Passed |
61+
| Message | 242 | 242 | 0 | All Passed |
62+
| MultiselectDropdown | 361 | 361 | 0 | All Passed |
63+
| NumericTextbox | 440 | 440 | 0 | All Passed |
64+
| OtpInput | 123 | 123 | 0 | All Passed |
65+
| PivotTable | 1361 | 1361 | 0 | All Passed |
66+
| ProgressBar | 199 | 199 | 0 | All Passed |
67+
| progressbutton | 101 | 101 | 0 | All Passed |
68+
| QueryBuilder | 584 | 584 | 0 | All Passed |
69+
| RangeNavigator | 196 | 196 | 0 | All Passed |
70+
| Rating | 106 | 106 | 0 | All Passed |
71+
| Ribbon | 440 | 440 | 0 | All Passed |
72+
| RichTextEditor | 1828 | 1828 | 0 | All Passed |
73+
| Scheduler | 5175 | 5175 | 0 | All Passed |
74+
| SfPdfViewer2 | 11584 | 11584 | 0 | All Passed |
75+
| Sidebar | 101 | 101 | 0 | All Passed |
76+
| Signature | 106 | 106 | 0 | All Passed |
77+
| Skeleton | 247 | 247 | 0 | All Passed |
78+
| Slider | 200 | 200 | 0 | All Passed |
79+
| SmithChart | 212 | 212 | 0 | All Passed |
80+
| SpeechToText | 112 | 112 | 0 | All Passed |
81+
| SpeedDial | 278 | 278 | 0 | All Passed |
82+
| Spinner | 184 | 184 | 0 | All Passed |
83+
| Splitter | 106 | 106 | 0 | All Passed |
84+
| Stepper | 284 | 284 | 0 | All Passed |
85+
| StockChart | 211 | 211 | 0 | All Passed |
86+
| Switch | 724 | 724 | 0 | All Passed |
87+
| Tabs | 278 | 278 | 0 | All Passed |
88+
| TextArea | 165 | 165 | 0 | All Passed |
89+
| Textbox | 698 | 698 | 0 | All Passed |
90+
| Timeline | 236 | 236 | 0 | All Passed |
91+
| TimePicker | 343 | 343 | 0 | All Passed |
92+
| Toast | 262 | 262 | 0 | All Passed |
93+
| Toolbar | 160 | 160 | 0 | All Passed |
94+
| Tooltip | 477 | 477 | 0 | All Passed |
95+
| TreeGrid | 3840 | 3840 | 0 | All Passed |
96+
| TreeMap | 177 | 177 | 0 | All Passed |
97+
| TreeView | 574 | 574 | 0 | All Passed |
98+
| DocIO | 16284 | 16284 | 0 | All Passed |
99+
| Metafilerenderer | 853 | 853 | 0 | All Passed |
100+
| PDF | 13114 | 13114 | 0 | All Passed |
101+
| Presentation | 54261 | 54261 | 0 | All Passed |
102+
| XlsIO | 17235 | 17235 | 0 | All Passed |

blazor/datagrid/edit-types.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
layout: post
33
title: Edit Types in Blazor DataGrid | Syncfusion
4-
description: Checkout and learn here all about Edit Types in Syncfusion Blazor DataGrid and much more details.
4+
description: Learn about the different edit types available in the Syncfusion Blazor DataGrid, how to customize them in the Grid, and much more.
55
platform: Blazor
66
control: DataGrid
77
documentation: ug
@@ -748,7 +748,7 @@ public class OrderData
748748

749749
## Customize DatePicker of DatePickerEdit Type
750750

751-
You can customize the [SfDatePicker](https://blazor.syncfusion.com/documentation/datepicker/getting-started-with-web-app) in the Grid edit form for date data type columns using the [EditorSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_EditorSettings) property. This customization allows you to adjust the properties and behavior of the `SfDatePicker` to meet your specific requirements. The [DateEditCellParams](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.DatePickerEditCellParams.html) class helps you achieve this customization by configuring the `EditorSettings` of the respective column in the Grid.
751+
You can customize the [SfDatePicker](https://blazor.syncfusion.com/documentation/datepicker/getting-started-with-web-app) in the Grid edit form for date data type columns using the [EditorSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_EditorSettings) property. This customization allows you to adjust the properties and behavior of the `SfDatePicker` to meet your specific requirements. The [DateEditCellParams](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.DateEditCellParams.html) class helps you achieve this customization by configuring the `EditorSettings` of the respective column in the Grid.
752752

753753
The table below highlights the key aspects of customizing a `SfDatePicker` using the `EditorSettings` property of a [GridColumn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html):
754754

@@ -855,13 +855,13 @@ public class OrderData
855855

856856
## Customize TimePicker of TimePickerEdit Type
857857

858-
You can customize the [SfTimePicker](https://blazor.syncfusion.com/documentation/timepicker/getting-started-with-web-app) in the Grid edit form for time data type columns using the [EditorSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_EditorSettings) property. This customization allows you to adjust the properties and behavior of the `SfTimePicker` to meet your specific requirements. The [TimeEditCellParams](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.TimeEditCellParams.html) class helps you achieve this customization by configuring the `EditorSettings` of the respective column in the Grid.
858+
You can customize the [SfTimePicker](https://blazor.syncfusion.com/documentation/timepicker/getting-started-webapp) in the Grid edit form for time data type columns using the [EditorSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_EditorSettings) property. This customization allows you to adjust the properties and behavior of the `SfTimePicker` to meet your specific requirements. The [TimeEditCellParams](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.TimeEditCellParams.html) class helps you achieve this customization by configuring the `EditorSettings` of the respective column in the Grid.
859859

860860
The table below highlights the key aspects of customizing a `SfTimePicker` using the `EditorSettings` property of a [GridColumn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html):
861861

862862
| Component | Edit Type | Description | Example Customized Edit Params |
863863
|------------|--------------|----------------------------------------------------------------------------------------------------------|---------------------------------|
864-
| [SfTimePicker](https://blazor.syncfusion.com/documentation/timepicker/getting-started-with-web-app) | TimePickerEdit | The `TimePickerEdit` type renders a `SfTimePicker` for time data type columns. To customize the `SfTimePicker`, refer to the [SfTimePicker API documentation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Calendars.SfTimePicker-1.html) for detailed information on available properties. | Params: { Value: new Date() } |
864+
| [SfTimePicker](https://blazor.syncfusion.com/documentation/timepicker/getting-started-webapp) | TimePickerEdit | The `TimePickerEdit` type renders a `SfTimePicker` for time data type columns. To customize the `SfTimePicker`, refer to the [SfTimePicker API documentation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Calendars.SfTimePicker-1.html) for detailed information on available properties. | Params: { Value: new Date() } |
865865

866866
Below is an example demonstrating how to customize the `SfTimePicker` for the **OrderTime** column in the Grid:
867867

@@ -1739,6 +1739,8 @@ public class EmployeeData
17391739

17401740
![Render images in the DropDownList editor using the ItemTemplate](./images/blazor-datagrid-render-image-using-item-template.gif)
17411741

1742+
> You can find the sample in the following [Github](https://github.com/SyncfusionExamples/databinding-in-blazor-datagrid/tree/master/Render-image-in-dropdownlist) repository.
1743+
17421744
### Render multiple columns in DropDownList
17431745

17441746
The Syncfusion Blazor DataGrid allows you to render a [SfDropDownList](https://blazor.syncfusion.com/documentation/dropdown-list/getting-started-with-web-app) within the Grid's edit form for a specific column. This feature is particularly useful when you want to display more detailed information for each item in the `SfDropDownList` while editing a column.

blazor/datagrid/editing.md

Lines changed: 193 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
layout: post
33
title: Editing in Blazor DataGrid | Syncfusion
4-
description: Checkout and learn here all about Editing in Syncfusion Blazor DataGrid and much more details.
4+
description: Discover comprehensive details about editing features in the Syncfusion Blazor DataGrid, including how to enable and customize them.
55
platform: Blazor
66
control: DataGrid
77
documentation: ug
@@ -1621,6 +1621,198 @@ public class OrderData
16211621

16221622
{% previewsample "https://blazorplayground.syncfusion.com/embed/BDBTWrDHUvvLUGmg?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %}
16231623

1624+
## Perform CRUD operation using Blazor DataGrid events
1625+
1626+
The Syncfusion Blazor DataGrid enables seamless CRUD (Create, Read, Update and Delete) operations directly with `IQueryable` data from a database without requiring additional data adaptors. This functionality can be implemented using the [DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_DataSource) property of the Grid and handling the necessary CRUD actions through Grid events such as [RowUpdated](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowUpdated)and [RowDeleting](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowDeleting).
1627+
1628+
### Create an interface layer to the database
1629+
1630+
Define the `Book` model class along with the `ILibraryService` interface. The Book model will represent the data structure for the books, and the `ILibraryService` interface will define the CRUD methods to interact with the database.
1631+
1632+
**Book Model**
1633+
1634+
The Book model represents the structure of a book in a library system. It includes essential properties such as Id, Name, Author, Quantity, Price, and Available.
1635+
1636+
```cs
1637+
public class Book
1638+
{
1639+
public long Id { get; set; }
1640+
public string Name { get; set; } = null!;
1641+
public string Author { get; set; } = null!;
1642+
public int? Quantity { get; set; }
1643+
public int Price { get; set; }
1644+
public bool? Available { get; set; }
1645+
}
1646+
```
1647+
1648+
**ILibraryService Interface**
1649+
1650+
The `ILibraryService` interface declares the CRUD operations that interact with the database for managing `Book` data.
1651+
1652+
```csharp
1653+
using System.Collections.Generic;
1654+
using System.Linq;
1655+
1656+
namespace LibraryManagement.Models
1657+
{
1658+
interface ILibraryService
1659+
{
1660+
IQueryable<Book> GetBooks();
1661+
void InsertBook(Book employee);
1662+
void UpdateBook(long id, Book employee);
1663+
Book SingleBook(long id);
1664+
void DeleteBook(long id);
1665+
}
1666+
}
1667+
```
1668+
1669+
### Create an intermediate service using the interface
1670+
1671+
Now, implement the `ILibraryService` interface in a service class. This service interacts with the database using Entity Framework and performs CRUD operations.
1672+
1673+
```csharp
1674+
using Microsoft.EntityFrameworkCore;
1675+
using System.Linq;
1676+
1677+
namespace LibraryManagement.Models
1678+
{
1679+
public class LibraryService : ILibraryService
1680+
{
1681+
private LibraryContext _context;
1682+
public LibraryService(LibraryContext context)
1683+
{
1684+
_context = context;
1685+
}
1686+
1687+
public void DeleteBook(long id)
1688+
{
1689+
try
1690+
{
1691+
Book ord = _context.Books.Find(id);
1692+
_context.Books.Remove(ord);
1693+
_context.SaveChanges();
1694+
}
1695+
catch
1696+
{
1697+
throw;
1698+
}
1699+
}
1700+
1701+
public IQueryable<Book> GetBooks()
1702+
{
1703+
try
1704+
{
1705+
return _context.Books.AsQueryable();
1706+
}
1707+
catch
1708+
{
1709+
throw;
1710+
}
1711+
}
1712+
1713+
public void InsertBook(Book book)
1714+
{
1715+
try
1716+
{
1717+
_context.Books.Add(book);
1718+
_context.SaveChanges();
1719+
}
1720+
catch
1721+
{
1722+
throw;
1723+
}
1724+
}
1725+
public void UpdateBook(long id, Book book)
1726+
{
1727+
try
1728+
{
1729+
var local = _context.Set<Book>().Local.FirstOrDefault(entry => entry.Id.Equals(book.Id));
1730+
// check if local is not null
1731+
if (local != null)
1732+
{
1733+
// detach
1734+
_context.Entry(local).State = EntityState.Detached;
1735+
}
1736+
_context.Entry(book).State = EntityState.Modified;
1737+
_context.SaveChanges();
1738+
}
1739+
catch
1740+
{
1741+
throw;
1742+
}
1743+
}
1744+
}
1745+
}
1746+
```
1747+
1748+
### Configure the DataGrid to perform CRUD actions using Blazor DataGrid events
1749+
1750+
To perform CRUD (Create, Read, Update, and Delete) operations with the Syncfusion Blazor DataGrid and keep your database in sync, handle the relevant Grid events. Since data is bound to the Grid using the `DataSource` property, you must explicitly update your backend in response to user actions.
1751+
1752+
**RowUpdated:** Triggered when a record is added or edited. Use this event to insert or update the record in your database.
1753+
1754+
**RowDeleting:** Triggered when a record is deleted. Use this event to remove the record from your database.
1755+
1756+
Below is an example showing how to wire up these events to perform CRUD operations using a service:
1757+
1758+
```cs
1759+
@page "/counter"
1760+
@rendermode InteractiveAuto
1761+
1762+
@using Syncfusion.Blazor.Data
1763+
@using BlazorWebApp.Shared.Models
1764+
@using BlazorWebApp.Shared.Services
1765+
1766+
@inject ClientServices clientlibrary
1767+
1768+
<SfGrid DataSource="@LibraryBooks"
1769+
Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Cancel", "Update" })"
1770+
TValue="Book">
1771+
<GridEditSettings AllowAdding="true"
1772+
AllowDeleting="true"
1773+
AllowEditing="true"
1774+
Mode="EditMode.Normal"></GridEditSettings>
1775+
<GridEvents RowDeleting="RowDeleting"
1776+
RowUpdated="RowUpdated"
1777+
TValue="Book"></GridEvents>
1778+
<GridColumns>
1779+
<GridColumn Field="@nameof(Book.Id)" IsPrimaryKey="true" IsIdentity="true" Visible="false"></GridColumn>
1780+
<GridColumn Field="@nameof(Book.Name)" Width="150"></GridColumn>
1781+
<GridColumn Field="@nameof(Book.Author)" Width="150"></GridColumn>
1782+
<GridColumn Field="@nameof(Book.Quantity)" Width="90" TextAlign="TextAlign.Right"></GridColumn>
1783+
<GridColumn Field="@nameof(Book.Price)" Width="90" Format="C2" TextAlign="TextAlign.Right"></GridColumn>
1784+
<GridColumn Field="@nameof(Book.Available)" DisplayAsCheckBox="true" Width="70"></GridColumn>
1785+
</GridColumns>
1786+
</SfGrid>
1787+
1788+
@code {
1789+
public List<Book> LibraryBooks { get; set; } = new();
1790+
1791+
protected override async Task OnInitializedAsync()
1792+
{
1793+
LibraryBooks = await clientlibrary.GetBooks();
1794+
}
1795+
public async Task RowDeleting(RowDeletingEventArgs<Book> args)
1796+
{
1797+
await clientlibrary.RemoveBook(args.Datas[0].Id);
1798+
}
1799+
public async Task RowUpdated(RowUpdatedEventArgs<Book> args)
1800+
{
1801+
if (args.Action == SaveActionType.Added)
1802+
{
1803+
await clientlibrary.InsertBook(args.Data); // Handle insert.
1804+
}
1805+
else if (args.Action == SaveActionType.Edited)
1806+
{
1807+
await clientlibrary.UpdateBook(args.Data.Id, args.Data); // Handle update.
1808+
}
1809+
}
1810+
}
1811+
```
1812+
1813+
This approach ensures that all CRUD actions performed in the Grid are synchronized with your backend data source.
1814+
1815+
> You can find the sample in the following [Github](https://github.com/SyncfusionExamples/blazor-server-datagrid-efcore-crud/) repository.
16241816
16251817
## See also
16261818

0 commit comments

Comments
 (0)