@@ -43,6 +43,10 @@ public partial class Grid<TItem> : BlazorBootstrapComponentBase
4343
4444 private int ? totalCount = null ;
4545
46+ private bool pendingPageSizeChanging = false ;
47+
48+ private bool isColumnsLoading = false ;
49+
4650 #endregion
4751
4852 #region Methods
@@ -68,17 +72,25 @@ protected override void OnInitialized()
6872 pageSize = PageSize ;
6973 selectedItems = SelectedItems ! ;
7074
75+ isColumnsLoading = true ;
76+
7177 base . OnInitialized ( ) ;
7278 }
7379
74- protected override Task OnParametersSetAsync ( )
80+ protected override async Task OnParametersSetAsync ( )
7581 {
7682 if ( ( Data is null && DataProvider is null ) || ( Data is not null && DataProvider is not null ) )
7783 throw new ArgumentException ( $ "Grid requires either { nameof ( Data ) } or { nameof ( DataProvider ) } , but not both or neither.") ;
7884
7985 if ( AllowPaging && PageSize < 0 )
8086 throw new ArgumentException ( $ "{ nameof ( PageSize ) } must be greater than zero.") ;
8187
88+ if ( pendingPageSizeChanging )
89+ {
90+ PageSize = pageSize ;
91+ return ;
92+ }
93+
8294 if ( isFirstRenderComplete )
8395 {
8496 // Perform a re-query only if the data source or something else has changed
@@ -93,8 +105,8 @@ protected override Task OnParametersSetAsync()
93105 {
94106 mustRefreshData = true ;
95107 pageSize = PageSize ;
96- _ = ResetPageNumberAsync ( ) ;
97- SaveGridSettingsAsync ( ) ;
108+ await ResetPageNumberAsync ( ) ;
109+ await SaveGridSettingsAsync ( ) ;
98110 }
99111
100112 //if (!mustRefreshData && selectedItems != SelectedItems)
@@ -106,10 +118,11 @@ protected override Task OnParametersSetAsync()
106118 // We want to trigger the first data load when we've collected the initial set of columns
107119 // because they might perform some action, like setting the default sort order.
108120 // It would be wasteful to have to re-query immediately.
109- return columns . Count > 0 && mustRefreshData ? RefreshDataAsync ( false ) : Task . CompletedTask ;
121+ if ( columns . Count > 0 && mustRefreshData )
122+ await RefreshDataAsync ( false ) ;
110123 }
111124
112- return base . OnParametersSetAsync ( ) ;
125+ await base . OnParametersSetAsync ( ) ;
113126 }
114127
115128 /// <summary>
@@ -170,9 +183,9 @@ private string GetColumnSummaryValue(GridSummaryColumnType type, string property
170183 /// </summary>
171184 public async ValueTask ResetPageNumber ( ) => await ResetPageNumberAsync ( true ) ;
172185
173- public Task SelectAllItemsAsync ( ) => SelectAllItemsInternalAsync ( true ) ;
186+ public async Task SelectAllItemsAsync ( ) => await SelectAllItemsInternalAsync ( true ) ;
174187
175- public Task UnSelectAllItemsAsync ( ) => SelectAllItemsInternalAsync ( false ) ;
188+ public async Task UnSelectAllItemsAsync ( ) => await SelectAllItemsInternalAsync ( false ) ;
176189
177190 internal void AddColumn ( GridColumn < TItem > column ) => columns . Add ( column ) ;
178191
@@ -254,6 +267,9 @@ internal async Task RefreshDataAsync(bool firstRender = false, CancellationToken
254267 await RefreshSelectionAsync ( ) ;
255268 }
256269
270+ if ( firstRender )
271+ isColumnsLoading = false ;
272+
257273 requestInProgress = false ;
258274
259275 await InvokeAsync ( StateHasChanged ) ;
@@ -476,10 +492,12 @@ private async Task OnPageChangedAsync(int newPageNumber)
476492
477493 private async Task OnPageSizeChangedAsync ( int newPageSize )
478494 {
495+ pendingPageSizeChanging = true ;
479496 pageSize = PageSize = newPageSize ;
480497 await ResetPageNumberAsync ( ) ;
481498 await SaveGridSettingsAsync ( ) ;
482499 await RefreshDataAsync ( false ) ;
500+ pendingPageSizeChanging = false ;
483501 }
484502
485503 private async Task OnRowCheckboxChanged ( string id , TItem item , ChangeEventArgs args )
@@ -564,14 +582,14 @@ private async Task RowDoubleClick(TItem item, EventArgs args)
564582 await OnRowDoubleClick . InvokeAsync ( new GridRowEventArgs < TItem > ( item ) ) ;
565583 }
566584
567- private Task SaveGridSettingsAsync ( )
585+ private async Task SaveGridSettingsAsync ( )
568586 {
569587 if ( ! GridSettingsChanged . HasDelegate )
570- return Task . CompletedTask ;
588+ return ;
571589
572590 var settings = new GridSettings { PageNumber = AllowPaging ? gridCurrentState . PageIndex : 0 , PageSize = AllowPaging ? pageSize : 0 , Filters = AllowFiltering ? GetFilters ( ) : null } ;
573591
574- return GridSettingsChanged . InvokeAsync ( settings ) ;
592+ await GridSettingsChanged . InvokeAsync ( settings ) ;
575593 }
576594
577595 private async Task SelectAllItemsInternalAsync ( bool selectAll )
@@ -595,11 +613,9 @@ private async Task SelectAllItemsInternalAsync(bool selectAll)
595613 SelectedItems = selectedItems ;
596614 }
597615
598- private Task SetCheckboxStateAsync ( string id , CheckboxState checkboxState )
616+ private async Task SetCheckboxStateAsync ( string id , CheckboxState checkboxState )
599617 {
600- queuedTasks . Enqueue ( async ( ) => await JSRuntime . InvokeVoidAsync ( "window.blazorBootstrap.grid.setSelectAllCheckboxState" , id , ( int ) checkboxState ) ) ;
601-
602- return Task . CompletedTask ;
618+ await JSRuntime . InvokeVoidAsync ( "window.blazorBootstrap.grid.setSelectAllCheckboxState" , id , ( int ) checkboxState ) ;
603619 }
604620
605621 /// <summary>
0 commit comments