diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs index 205a9aeebcc..4a12cd01653 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs @@ -502,7 +502,7 @@ public async Task AddAsync() { // 数据源为 DataTable 新建后重建行与列 await DynamicContext.AddAsync(SelectedRows.OfType()); - await ResetDynamicContext(); + ResetDynamicContext(); if (!IsKeepSelectedRowAfterAdd) { @@ -1030,7 +1030,7 @@ protected async Task DeleteAsync() if (DynamicContext != null) { await DynamicContext.DeleteAsync(SelectedRows.OfType()); - await ResetDynamicContext(); + ResetDynamicContext(); SelectedRows.Clear(); await OnSelectedRowsChanged(); } @@ -1098,7 +1098,7 @@ async Task DeleteItemsAsync() } } - private async Task ResetDynamicContext() + private void ResetDynamicContext() { if (DynamicContext != null) { @@ -1112,7 +1112,7 @@ private async Task ResetDynamicContext() FirstFixedColumnCache.Clear(); LastFixedColumnCache.Clear(); - await InternalResetVisibleColumns(Columns); + InternalResetVisibleColumns(Columns); var queryOption = BuildQueryPageOptions(); // 设置是否为首次查询 diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index a5725fb5f70..c635fdf3332 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -1128,11 +1128,11 @@ private async Task ReloadColumnVisibleFromBrowserAsync() if (!string.IsNullOrEmpty(ClientTableName)) { // 读取浏览器配置 - var clientColumns = await InvokeAsync>("reloadColumnList", ClientTableName); + var clientColumns = await InvokeAsync>("reloadColumnList", ClientTableName); clientColumns ??= []; foreach (var column in _visibleColumns) { - var item = clientColumns.FirstOrDefault(i => i.Name == column.Name); + var item = clientColumns.FirstOrDefault(i => i?.Name == column.Name); if (item != null) { column.Visible = item.Visible; @@ -1225,7 +1225,7 @@ private async Task ProcessFirstRender() await OnColumnCreating(cols); } - await InternalResetVisibleColumns(cols); + InternalResetVisibleColumns(cols); await ReloadColumnVisibleFromBrowserAsync(); @@ -1278,7 +1278,7 @@ private void ResetColumnWidth(List columns) } } - private async Task InternalResetVisibleColumns(List columns, IEnumerable? items = null) + private void InternalResetVisibleColumns(List columns, IEnumerable? items = null) { var cols = columns.Select(i => new ColumnVisibleItem(i.GetFieldName(), i.GetVisible()) { DisplayName = i.GetDisplayName() }).ToList(); if (items != null) @@ -1304,7 +1304,7 @@ private async Task InternalResetVisibleColumns(List columns, IEnum /// 设置 列可见方法 /// /// - public async Task ResetVisibleColumns(IEnumerable columns) + public void ResetVisibleColumns(IEnumerable columns) { // https://github.com/dotnetcore/BootstrapBlazor/issues/6823 if (AllowResizing) @@ -1312,7 +1312,7 @@ public async Task ResetVisibleColumns(IEnumerable columns) _resetColumns = true; } - await InternalResetVisibleColumns(Columns, columns); + InternalResetVisibleColumns(Columns, columns); StateHasChanged(); } @@ -1507,7 +1507,7 @@ void SetDynamicEditTemplate() if (DynamicContext.OnValueChanged != null) { var parameters = col.ComponentParameters?.ToList() ?? []; - parameters.Add(new(nameof(ValidateBase.OnValueChanged), onValueChanged.Invoke(d, col, (model, column, val) => DynamicContext.OnValueChanged(model, column, val)))); + parameters.Add(new(nameof(ValidateBase<>.OnValueChanged), onValueChanged.Invoke(d, col, (model, column, val) => DynamicContext.OnValueChanged(model, column, val)))); col.ComponentParameters = parameters; } builder.CreateComponentByFieldType(this, col, row, changedType, false, col.GetLookupService(InjectLookupService), skipValidate: true); @@ -1518,7 +1518,7 @@ void SetEditTemplate() { var onValueChanged = Utility.GetOnValueChangedInvoke(col.PropertyType); var parameters = col.ComponentParameters?.ToList() ?? []; - parameters.Add(new(nameof(ValidateBase.OnValueChanged), onValueChanged(item, col, (model, column, val) => InternalOnSaveAsync(model, ItemChangedType.Update)))); + parameters.Add(new(nameof(ValidateBase<>.OnValueChanged), onValueChanged(item, col, (model, column, val) => InternalOnSaveAsync(model, ItemChangedType.Update)))); col.ComponentParameters = parameters; } } diff --git a/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs b/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs index e80f384b466..cbbbb565090 100644 --- a/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs +++ b/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs @@ -8,6 +8,9 @@ namespace BootstrapBlazor.Components; +/// +/// ColumnVisibleItem 序列化转化器 +/// public class ColumnVisibleItemConverter : JsonConverter { /// @@ -45,7 +48,7 @@ public class ColumnVisibleItemConverter : JsonConverter } } } - return new ColumnVisibleItem(name, visible); + return string.IsNullOrEmpty(name) ? null : new ColumnVisibleItem(name, visible); } /// diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 4785b88ec95..b5ae1406052 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -732,8 +732,9 @@ public void ResetFilter_Null() public async Task ShowColumnList_Ok() { // 设置客户端存储 - Context.JSInterop.Setup>("reloadColumnList", "test").SetResult( + Context.JSInterop.Setup>("reloadColumnList", "test").SetResult( [ + null, new("Name", false), new("Address", true) ]); diff --git a/test/UnitTest/Converters/ColumnVisibleItemConverterTest.cs b/test/UnitTest/Converters/ColumnVisibleItemConverterTest.cs new file mode 100644 index 00000000000..f8fc8ce4996 --- /dev/null +++ b/test/UnitTest/Converters/ColumnVisibleItemConverterTest.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the Apache 2.0 License +// See the LICENSE file in the project root for more information. +// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone + +using System.Text.Json; + +namespace UnitTest.Converters; + +public class ColumnVisibleItemConverterTest +{ + [Fact] + public void ColumnVisibleItemConverter_Ok() + { + var item = new ColumnVisibleItem("name", true) { DisplayName = "display" }; + var json = JsonSerializer.Serialize(item); + Assert.Equal("{\"name\":\"name\",\"visible\":true}", json); + + var item2 = JsonSerializer.Deserialize>("[{\"test\":\"test\"}]"); + } +}