From cb0f351d6b38ba99329ebd6771eb60d708fffa42 Mon Sep 17 00:00:00 2001 From: braia123 Date: Sun, 26 Oct 2025 22:31:11 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E6=8C=81=E4=B9=85=E5=8C=96=E5=88=97?= =?UTF-8?q?=E7=9A=84=E6=98=BE=E9=9A=90=E5=88=B0bb-table-column-visiable-{C?= =?UTF-8?q?lientTableName}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Samples/Table/TablesColumnList.razor | 2 +- .../Components/Table/Table.razor.Checkbox.cs | 7 +++- .../Components/Table/Table.razor.Toolbar.cs | 8 ++--- .../Components/Table/Table.razor.cs | 32 ++++++++++++++++--- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor index b966c14f09a..dd0d96eeadc 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor @@ -24,7 +24,7 @@ IsPagination="true" PageItemsSource="@PageItemsSource" IsStriped="true" IsBordered="true" IsMultipleSelect="true" ShowToolbar="true" ShowAddButton="false" ShowEditButton="false" ShowDeleteButton="false" - ShowExtendButtons="false" ShowColumnList="true" + ShowExtendButtons="false" ShowColumnList="true" ClientTableName="testtable" OnQueryAsync="@OnQueryAsync"> diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs index 4945b2afa6e..271c10ac704 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs @@ -3,6 +3,8 @@ // 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 BootstrapBlazor.Components; public partial class Table @@ -155,7 +157,10 @@ private async Task OnToggleColumnVisible(string columnName, bool visible) { _resetColumns = true; } - + if(ClientTableName != null && ShowColumnList) + { + await JSRuntime.InvokeVoidAsync("localStorage.setItem", "bb-table-column-visiable-"+ClientTableName, JsonSerializer.Serialize(_visibleColumns) ?? ""); + } if (OnColumnVisibleChanged != null) { await OnColumnVisibleChanged(columnName, visible); diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs index 4a12cd01653..205a9aeebcc 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()); - ResetDynamicContext(); + await ResetDynamicContext(); if (!IsKeepSelectedRowAfterAdd) { @@ -1030,7 +1030,7 @@ protected async Task DeleteAsync() if (DynamicContext != null) { await DynamicContext.DeleteAsync(SelectedRows.OfType()); - ResetDynamicContext(); + await ResetDynamicContext(); SelectedRows.Clear(); await OnSelectedRowsChanged(); } @@ -1098,7 +1098,7 @@ async Task DeleteItemsAsync() } } - private void ResetDynamicContext() + private async Task ResetDynamicContext() { if (DynamicContext != null) { @@ -1112,7 +1112,7 @@ private void ResetDynamicContext() FirstFixedColumnCache.Clear(); LastFixedColumnCache.Clear(); - InternalResetVisibleColumns(Columns); + await InternalResetVisibleColumns(Columns); var queryOption = BuildQueryPageOptions(); // 设置是否为首次查询 diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index cb0bc45e476..6ea110a5e0a 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -1207,7 +1207,7 @@ private async Task ProcessFirstRender() await OnColumnCreating(cols); } - InternalResetVisibleColumns(cols); + await InternalResetVisibleColumns(cols); Columns.Clear(); Columns.AddRange(cols.OrderFunc()); @@ -1258,9 +1258,33 @@ private void ResetColumnWidth(List columns) } } - private void InternalResetVisibleColumns(List columns, IEnumerable? items = null) + private async Task InternalResetVisibleColumns(List columns, IEnumerable? items = null) { var cols = columns.Select(i => new ColumnVisibleItem(i.GetFieldName(), i.GetVisible()) { DisplayName = i.GetDisplayName() }).ToList(); + List? ret = null; + if (ClientTableName != null && ShowColumnList) + { + var jsonData = await JSRuntime.InvokeAsync("localStorage.getItem", "bb-table-column-visiable-" + ClientTableName); + if (!string.IsNullOrEmpty(jsonData)) + { + try + { + ret = JsonSerializer.Deserialize>(jsonData, _serializerOption); + } + catch { } + if(ret != null) + { + foreach (var i in ret) + { + var col = cols.FirstOrDefault(d => d.Name == i.Name && d.DisplayName == i.DisplayName); + if (col != null) + { + col.Visible = i.Visible; + } + } + } + } + } if (items != null) { foreach (var column in cols) @@ -1284,7 +1308,7 @@ private void InternalResetVisibleColumns(List columns, IEnumerable /// 设置 列可见方法 /// /// - public void ResetVisibleColumns(IEnumerable columns) + public async Task ResetVisibleColumns(IEnumerable columns) { // https://github.com/dotnetcore/BootstrapBlazor/issues/6823 if (AllowResizing) @@ -1292,7 +1316,7 @@ public void ResetVisibleColumns(IEnumerable columns) _resetColumns = true; } - InternalResetVisibleColumns(Columns, columns); + await InternalResetVisibleColumns(Columns, columns); StateHasChanged(); } From abd779e01f3287f1b0970b6f76707c0613f20c79 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 29 Oct 2025 11:27:22 +0800 Subject: [PATCH 02/10] =?UTF-8?q?revert:=20=E6=92=A4=E9=94=80=E5=BC=82?= =?UTF-8?q?=E6=AD=A5=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/Table.razor.Toolbar.cs | 8 ++++---- src/BootstrapBlazor/Components/Table/Table.razor.cs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) 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..456ed6d68f3 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -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(); } From ce44dc41c762054e6afd51d9e8c378eb2ced1c7c Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 29 Oct 2025 11:27:33 +0800 Subject: [PATCH 03/10] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs b/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs index e80f384b466..7c0fbecfbf2 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 { /// From 76fa5afc4fb2e894438197ea5f7c15e2f459b3dd Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 29 Oct 2025 11:27:51 +0800 Subject: [PATCH 04/10] =?UTF-8?q?refactor:=20=E6=B6=88=E9=99=A4=E8=AD=A6?= =?UTF-8?q?=E5=91=8A=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs b/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs index 7c0fbecfbf2..b49e82f571c 100644 --- a/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs +++ b/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs @@ -48,7 +48,7 @@ public class ColumnVisibleItemConverter : JsonConverter } } } - return new ColumnVisibleItem(name, visible); + return new ColumnVisibleItem(name ?? "", visible); } /// From 1b5953b8938e5226103f2d3dc9fe82566980aea2 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 29 Oct 2025 11:28:07 +0800 Subject: [PATCH 05/10] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index 456ed6d68f3..30d3d682b7b 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -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; } } From 68d5a02494301f64da2f23ea1720bfbf5598181b Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 29 Oct 2025 11:33:02 +0800 Subject: [PATCH 06/10] =?UTF-8?q?Revert=20"=E6=8C=81=E4=B9=85=E5=8C=96?= =?UTF-8?q?=E5=88=97=E7=9A=84=E6=98=BE=E9=9A=90=E5=88=B0bb-table-column-vi?= =?UTF-8?q?siable-{ClientTableName}"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit cb0f351d6b38ba99329ebd6771eb60d708fffa42. # Conflicts: # src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs --- .../Samples/Table/TablesColumnList.razor | 2 +- .../Components/Table/Table.razor.Checkbox.cs | 2 -- .../Components/Table/Table.razor.Toolbar.cs | 8 ++--- .../Components/Table/Table.razor.cs | 32 +++---------------- 4 files changed, 9 insertions(+), 35 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor index dd0d96eeadc..b966c14f09a 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor @@ -24,7 +24,7 @@ IsPagination="true" PageItemsSource="@PageItemsSource" IsStriped="true" IsBordered="true" IsMultipleSelect="true" ShowToolbar="true" ShowAddButton="false" ShowEditButton="false" ShowDeleteButton="false" - ShowExtendButtons="false" ShowColumnList="true" ClientTableName="testtable" + ShowExtendButtons="false" ShowColumnList="true" OnQueryAsync="@OnQueryAsync"> diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs index d354e21f3c2..523ca00db49 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs @@ -3,8 +3,6 @@ // 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 BootstrapBlazor.Components; public partial class Table 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 5af5f255857..30d3d682b7b 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -1225,7 +1225,7 @@ private async Task ProcessFirstRender() await OnColumnCreating(cols); } - await InternalResetVisibleColumns(cols); + InternalResetVisibleColumns(cols); await ReloadColumnVisibleFromBrowserAsync(); @@ -1278,33 +1278,9 @@ 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(); - List? ret = null; - if (ClientTableName != null && ShowColumnList) - { - var jsonData = await JSRuntime.InvokeAsync("localStorage.getItem", "bb-table-column-visiable-" + ClientTableName); - if (!string.IsNullOrEmpty(jsonData)) - { - try - { - ret = JsonSerializer.Deserialize>(jsonData, _serializerOption); - } - catch { } - if(ret != null) - { - foreach (var i in ret) - { - var col = cols.FirstOrDefault(d => d.Name == i.Name && d.DisplayName == i.DisplayName); - if (col != null) - { - col.Visible = i.Visible; - } - } - } - } - } if (items != null) { foreach (var column in cols) @@ -1328,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) @@ -1336,7 +1312,7 @@ public async Task ResetVisibleColumns(IEnumerable columns) _resetColumns = true; } - await InternalResetVisibleColumns(Columns, columns); + InternalResetVisibleColumns(Columns, columns); StateHasChanged(); } From 3a5c95acf35b3f9ed32505ee9c719422e70283a9 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 29 Oct 2025 11:34:05 +0800 Subject: [PATCH 07/10] =?UTF-8?q?revert:=20=E6=92=A4=E9=94=80=E6=9B=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Samples/Table/TablesColumnList.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor index b966c14f09a..dd0d96eeadc 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesColumnList.razor @@ -24,7 +24,7 @@ IsPagination="true" PageItemsSource="@PageItemsSource" IsStriped="true" IsBordered="true" IsMultipleSelect="true" ShowToolbar="true" ShowAddButton="false" ShowEditButton="false" ShowDeleteButton="false" - ShowExtendButtons="false" ShowColumnList="true" + ShowExtendButtons="false" ShowColumnList="true" ClientTableName="testtable" OnQueryAsync="@OnQueryAsync"> From eefcc1377de8c90e7be6729da0a5207e11e39223 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 29 Oct 2025 12:35:46 +0800 Subject: [PATCH 08/10] =?UTF-8?q?refactor:=20=E5=85=BC=E5=AE=B9=20null=20?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.cs | 4 ++-- src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index 30d3d682b7b..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; diff --git a/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs b/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs index b49e82f571c..cbbbb565090 100644 --- a/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs +++ b/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs @@ -48,7 +48,7 @@ public class ColumnVisibleItemConverter : JsonConverter } } } - return new ColumnVisibleItem(name ?? "", visible); + return string.IsNullOrEmpty(name) ? null : new ColumnVisibleItem(name, visible); } /// From 51422694babb73f9b9030b04d36dc7c2ebe17bc7 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 29 Oct 2025 12:35:54 +0800 Subject: [PATCH 09/10] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ColumnVisibleItemConverterTest.cs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 test/UnitTest/Converters/ColumnVisibleItemConverterTest.cs 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\"}]"); + } +} From 59aaa2e0affee0d52ebd5a8ee92d27e0906e82d9 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 29 Oct 2025 12:36:00 +0800 Subject: [PATCH 10/10] =?UTF-8?q?test:=20=E6=9B=B4=E6=96=B0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TableTest.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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) ]);