Skip to content

Commit d417a09

Browse files
Merge pull request #10 from DevExpress-Examples/25.2.5+
25.2.5+
2 parents 0d5e4f6 + 64bab85 commit d417a09

9 files changed

Lines changed: 251 additions & 168 deletions

File tree

CS/GridWithContextMenu/Data/GridContextMenuHelper.cs

Lines changed: 168 additions & 146 deletions
Large diffs are not rendered by default.

CS/GridWithContextMenu/Data/WeatherForecastService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public enum Summaries {
88
public Task<List<WeatherForecast>> GetForecastAsync() {
99
if (Forecasts == null) {
1010
var rnd = new Random();
11-
Forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast {
11+
Forecasts = Enumerable.Range(1, 25).Select(index => new WeatherForecast {
1212
ID = index,
1313
Date = DateTime.Today.AddDays(index),
1414
TemperatureC = rnd.Next(-20, 55),

CS/GridWithContextMenu/GridWithContextMenu.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
<Folder Include="wwwroot\images\" />
99
</ItemGroup>
1010
<ItemGroup>
11-
<PackageReference Include="DevExpress.Blazor" Version="25.1.3" />
11+
<PackageReference Include="DevExpress.Blazor" Version="25.2.5" />
1212
</ItemGroup>
1313
</Project>

CS/GridWithContextMenu/Pages/GridContextMenuContainer.razor

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
@using GridWithContextMenu.Data
22
@using System.Collections
33

4-
<DxContextMenu @ref="ColumnContextMenu"
5-
Data="ColumnContextMenuData"
6-
ItemClick="ColumnContextMenu_ItemClick">
4+
<DxContextMenu @ref="CustomContextMenu"
5+
Data="CustomContextMenuData"
6+
ItemClick="CustomContextMenu_ItemClick">
77
<DataMappings>
88
<DxContextMenuDataMapping Text="@nameof(ContextMenuItem.Text)"
99
Visible="@nameof(ContextMenuItem.Visible)"
@@ -28,28 +28,26 @@
2828
</DxContextMenu>
2929

3030
@code {
31-
DxContextMenu ColumnContextMenu { get; set; }
31+
DxContextMenu CustomContextMenu { get; set; }
3232
DxContextMenu RowContextMenu { get; set; }
3333

34-
IEnumerable ColumnContextMenuData { get; set; }
34+
IEnumerable CustomContextMenuData { get; set; }
3535
IEnumerable RowContextMenuData { get; set; }
3636

37-
IGridColumn ContextMenuColumn { get; set; }
3837
int ContextMenuRowIndex { get; set; }
3938

4039
[Parameter] public IGrid Grid { get; set; }
4140

42-
void ColumnContextMenu_ItemClick(ContextMenuItemClickEventArgs e)
43-
=> GridContextMenuHelper.ProcessColumnMenuItemClick((ContextMenuItem)e.ItemInfo.DataItem, ContextMenuColumn, Grid);
41+
async Task CustomContextMenu_ItemClick(ContextMenuItemClickEventArgs e)
42+
=> await GridContextMenuHelper.ProcessCustomMenuItemClick((ContextMenuItem)e.ItemInfo.DataItem, Grid);
4443

4544
async Task RowContextMenu_ItemClick(ContextMenuItemClickEventArgs e)
4645
=> await GridContextMenuHelper.ProcessRowMenuItemClickAsync((ContextMenuItem)e.ItemInfo.DataItem, ContextMenuRowIndex, Grid);
4746

4847
public async Task Grid_ContextMenu(GridCustomizeElementEventArgs e, MouseEventArgs mouseArgs) {
49-
if(GridContextMenuHelper.IsColumnContextMenuElement(e.ElementType)) {
50-
ContextMenuColumn = e.Column;
51-
ColumnContextMenuData = GridContextMenuHelper.GetColumnItems(e);
52-
await ColumnContextMenu.ShowAsync(mouseArgs);
48+
if(GridContextMenuHelper.IsCustomContextMenuElement(e.ElementType)) {
49+
CustomContextMenuData = GridContextMenuHelper.GetCustomItems(e);
50+
await CustomContextMenu.ShowAsync(mouseArgs);
5351
}
5452
if(GridContextMenuHelper.IsRowContextMenuElement(e.ElementType)) {
5553
ContextMenuRowIndex = e.VisibleIndex;

CS/GridWithContextMenu/Pages/Index.razor

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,41 @@
66
<DxGrid @ref="Grid"
77
Data="GridData"
88
EditMode="GridEditMode.EditRow"
9+
@bind-SearchText="GridSearchText"
910
CssClass="mw-1100"
1011
CustomizeElement="Grid_CustomizeElement"
11-
@oncontextmenu:preventDefault
1212
EditModelSaving="Grid_EditModelSaving"
13-
DataItemDeleting="Grid_DataItemDeleting">
13+
DataItemDeleting="Grid_DataItemDeleting"
14+
ContextMenus="GridContextMenus.All"
15+
CustomizeContextMenu="Grid_CustomizeContextMenu"
16+
@oncontextmenu:preventDefault>
17+
<ToolbarTemplate>
18+
<DxToolbar ItemRenderStyleMode="ToolbarRenderStyleMode.Plain">
19+
<DxToolbarItem Text="New" Click="NewItem_Click" />
20+
<DxToolbarItem Text="Column Chooser" BeginGroup="true" Click="ColumnChooserItem_Click" />
21+
<DxToolbarItem Text="Export">
22+
<Items>
23+
<DxToolbarItem Text="To CSV" Click="ExportCsvItem_Click" />
24+
<DxToolbarItem Text="To XLSX" Click="ExportXlsxItem_Click" />
25+
<DxToolbarItem Text="To XLS" Click="ExportXlsItem_Click" />
26+
<DxToolbarItem Text="To PDF" Click="ExportPdfItem_Click" />
27+
</Items>
28+
</DxToolbarItem>
29+
<DxToolbarItem BeginGroup="true">
30+
<Template Context="toolbar_item_context">
31+
<DxSearchBox @bind-Text="GridSearchText"
32+
BindValueMode="BindValueMode.OnInput"
33+
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto"
34+
aria-label="Search" />
35+
</Template>
36+
</DxToolbarItem>
37+
</DxToolbar>
38+
</ToolbarTemplate>
1439
<Columns>
15-
<DxGridDataColumn FieldName="Date" SortIndex="0" />
40+
<DxGridDataColumn FieldName="Date" />
1641
<DxGridDataColumn FieldName="TemperatureC" />
1742
<DxGridDataColumn FieldName="TemperatureF" />
18-
<DxGridDataColumn FieldName="Summary" />
43+
<DxGridDataColumn FieldName="Summary" GroupIndex="0" />
1944
</Columns>
2045
<TotalSummary>
2146
<DxGridSummaryItem SummaryType="GridSummaryItemType.Avg" FieldName="TemperatureC" />
@@ -28,11 +53,15 @@
2853
IGrid Grid { get; set; }
2954
GridContextMenuContainer ContextMenuContainer { get; set; }
3055
object GridData { get; set; }
56+
string GridSearchText = "";
57+
const string ExportFileName = "ExportResult";
3158

3259
protected override async Task OnInitializedAsync() {
3360
GridData = await ForecastService.GetForecastAsync();
3461
}
3562

63+
void Grid_CustomizeContextMenu(GridCustomizeContextMenuEventArgs args) => GridContextMenuHelper.CustomizeContextMenu(args);
64+
3665
void Grid_CustomizeElement(GridCustomizeElementEventArgs e) {
3766
if(GridContextMenuHelper.IsContextMenuElement(e.ElementType)) {
3867
e.Attributes["oncontextmenu"] = EventCallback.Factory.Create<MouseEventArgs>(
@@ -51,4 +80,11 @@
5180
await ForecastService.Remove(item);
5281
}
5382
}
83+
84+
async Task NewItem_Click() => await Grid.StartEditNewRowAsync();
85+
void ColumnChooserItem_Click(ToolbarItemClickEventArgs e) => Grid.ShowColumnChooser();
86+
async Task ExportXlsxItem_Click() => await Grid.ExportToXlsxAsync(ExportFileName);
87+
async Task ExportXlsItem_Click() => await Grid.ExportToXlsAsync(ExportFileName);
88+
async Task ExportCsvItem_Click() => await Grid.ExportToCsvAsync(ExportFileName);
89+
async Task ExportPdfItem_Click() => await Grid.ExportToPdfAsync(ExportFileName);
5490
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"profiles": {
3+
"GridWithContextMenu": {
4+
"commandName": "Project",
5+
"launchBrowser": true,
6+
"environmentVariables": {
7+
"ASPNETCORE_ENVIRONMENT": "Development"
8+
},
9+
"applicationUrl": "https://localhost:2159;http://localhost:2160"
10+
}
11+
}
12+
}

CS/GridWithContextMenu/wwwroot/css/icons.css

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
.grid-context-menu-item-collapse-detail-row,
3232
.grid-context-menu-item-new-row,
3333
.grid-context-menu-item-edit-row,
34-
.grid-context-menu-item-delete-row {
34+
.grid-context-menu-item-delete-row,
35+
.grid-context-menu-item-export {
3536
width: 16px;
3637
height: 16px;
3738
background-repeat: no-repeat;
@@ -58,7 +59,8 @@
5859
.dropdown-item:active .grid-context-menu-item-collapse-detail-row,
5960
.dropdown-item:active .grid-context-menu-item-new-row,
6061
.dropdown-item:active .grid-context-menu-item-edit-row,
61-
.dropdown-item:active .grid-context-menu-item-delete-row {
62+
.dropdown-item:active .grid-context-menu-item-delete-row,
63+
.dropdown-item:active .grid-context-menu-item-export {
6264
background-color: white;
6365
}
6466

@@ -78,7 +80,8 @@
7880
.dropdown-item.disabled .grid-context-menu-item-collapse-detail-row,
7981
.dropdown-item.disabled .grid-context-menu-item-new-row,
8082
.dropdown-item.disabled .grid-context-menu-item-edit-row,
81-
.dropdown-item.disabled .grid-context-menu-item-delete-row {
83+
.dropdown-item.disabled .grid-context-menu-item-delete-row,
84+
.dropdown-item.disabled .grid-context-menu-item-export {
8285
background-color: #c3c2c2;
8386
}
8487

@@ -166,6 +169,10 @@
166169
mask-image: url(../images/icons/delete-row.svg);
167170
-webkit-mask-image: url(../images/icons/delete-row.svg);
168171
}
172+
.grid-context-menu-item-export {
173+
mask-image: url(../images/icons/export-grid.svg);
174+
-webkit-mask-image: url(../images/icons/export-grid.svg);
175+
}
169176

170177

171178
.grid-context-menu-item-filter-row,
Lines changed: 8 additions & 0 deletions
Loading

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!-- default badges list -->
2-
![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/520791644/25.1.3%2B)
2+
![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/520791644/25.2.5%2B)
33
[![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T1106945)
44
[![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183)
55
[![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives)

0 commit comments

Comments
 (0)