From cb0f351d6b38ba99329ebd6771eb60d708fffa42 Mon Sep 17 00:00:00 2001 From: braia123 Date: Sun, 26 Oct 2025 22:31:11 +0800 Subject: [PATCH 01/13] =?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 afabc3c912d841619cf76602ceab29520dd1a75a Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 16:44:06 +0800 Subject: [PATCH 02/13] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E6=8C=81?= =?UTF-8?q?=E4=B9=85=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/Table.razor.Checkbox.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs index 271c10ac704..253175cfdc1 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 @@ -157,9 +155,9 @@ private async Task OnToggleColumnVisible(string columnName, bool visible) { _resetColumns = true; } - if(ClientTableName != null && ShowColumnList) + if (ClientTableName != null && ShowColumnList) { - await JSRuntime.InvokeVoidAsync("localStorage.setItem", "bb-table-column-visiable-"+ClientTableName, JsonSerializer.Serialize(_visibleColumns) ?? ""); + await InvokeVoidAsync("saveColumnList", ClientTableName, _visibleColumns); } if (OnColumnVisibleChanged != null) { From 1ed5f73b2584da856f127b8ffa7eac6606a93b65 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 16:44:53 +0800 Subject: [PATCH 03/13] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E6=8C=81=E4=B9=85=E5=8C=96=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/Table.razor.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.js b/src/BootstrapBlazor/Components/Table/Table.razor.js index 42801a19e80..686ffbc6a64 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.js +++ b/src/BootstrapBlazor/Components/Table/Table.razor.js @@ -21,6 +21,23 @@ export function init(id, invoke, options) { reset(id) } +export function saveColumnList(tableName, columns) { + const key = `bb-table-column-visiable-${tableName}` + return localStorage.setItem(key, JSON.stringify(columns)); +} + +export function reloadColumnList(tableName) { + const key = `bb-table-column-visiable-${tableName}` + const json = localStorage.getItem(key); + + let columns = []; + try { + columns = JSON.parse(json); + } + catch { } + return columns; +} + export function reloadColumnWidth(tableName) { const key = `bb-table-column-width-${tableName}` return localStorage.getItem(key); From 2473a625a2a9af5dfc362450c26c0e1ac0f03d67 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 17:12:03 +0800 Subject: [PATCH 04/13] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E7=A9=BA?= =?UTF-8?q?=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.js b/src/BootstrapBlazor/Components/Table/Table.razor.js index 686ffbc6a64..9f5598420ca 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.js +++ b/src/BootstrapBlazor/Components/Table/Table.razor.js @@ -29,12 +29,13 @@ export function saveColumnList(tableName, columns) { export function reloadColumnList(tableName) { const key = `bb-table-column-visiable-${tableName}` const json = localStorage.getItem(key); - let columns = []; - try { - columns = JSON.parse(json); + if (json) { + try { + columns = JSON.parse(json); + } + catch { } } - catch { } return columns; } From 6391a1334ed6d54d98fd962d49ede8712325f8b5 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 17:12:20 +0800 Subject: [PATCH 05/13] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20ColumnVisibl?= =?UTF-8?q?eItemConverter=20=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/ColumnVisibleItem.cs | 4 ++ .../Converter/ColumnVisibleItemConverter.cs | 64 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs diff --git a/src/BootstrapBlazor/Components/Table/ColumnVisibleItem.cs b/src/BootstrapBlazor/Components/Table/ColumnVisibleItem.cs index 5a3b5731995..69405a0d720 100644 --- a/src/BootstrapBlazor/Components/Table/ColumnVisibleItem.cs +++ b/src/BootstrapBlazor/Components/Table/ColumnVisibleItem.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.Serialization; + namespace BootstrapBlazor.Components; /// @@ -10,6 +12,7 @@ namespace BootstrapBlazor.Components; /// /// /// +[JsonConverter(typeof(ColumnVisibleItemConverter))] public class ColumnVisibleItem(string name, bool visible) { /// @@ -20,6 +23,7 @@ public class ColumnVisibleItem(string name, bool visible) /// /// 获得 列名称 /// + [JsonIgnore] public string? DisplayName { get; set; } /// diff --git a/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs b/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs new file mode 100644 index 00000000000..e80f384b466 --- /dev/null +++ b/src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs @@ -0,0 +1,64 @@ +// 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; +using System.Text.Json.Serialization; + +namespace BootstrapBlazor.Components; + +public class ColumnVisibleItemConverter : JsonConverter +{ + /// + /// + /// + /// + /// + /// + /// + public override ColumnVisibleItem? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + string? name = null; + bool visible = false; + if (reader.TokenType == JsonTokenType.StartObject) + { + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + if (reader.TokenType == JsonTokenType.PropertyName) + { + var propertyName = reader.GetString(); + if (propertyName == "name") + { + reader.Read(); + name = reader.GetString(); + } + else if (propertyName == "visible") + { + reader.Read(); + visible = reader.GetBoolean(); + } + } + } + } + return new ColumnVisibleItem(name, visible); + } + + /// + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, ColumnVisibleItem value, JsonSerializerOptions options) + { + writer.WriteStartObject(); + writer.WriteString("name", value.Name); + writer.WriteBoolean("visible", value.Visible); + writer.WriteEndObject(); + } +} From 617da4445afd9b180ba4b83cbad6ba3e30baaaa5 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 17:12:46 +0800 Subject: [PATCH 06/13] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs index 253175cfdc1..523ca00db49 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs @@ -155,7 +155,7 @@ private async Task OnToggleColumnVisible(string columnName, bool visible) { _resetColumns = true; } - if (ClientTableName != null && ShowColumnList) + if (!string.IsNullOrEmpty(ClientTableName)) { await InvokeVoidAsync("saveColumnList", ClientTableName, _visibleColumns); } From efe8ee967fa04f272ca22a8cea4095c6e9d9f994 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 17:13:20 +0800 Subject: [PATCH 07/13] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/Table.razor.cs | 34 +++++++------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index 6ea110a5e0a..894925b4044 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -1261,42 +1261,32 @@ private void ResetColumnWidth(List columns) 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) + if (items != null) { - var jsonData = await JSRuntime.InvokeAsync("localStorage.getItem", "bb-table-column-visiable-" + ClientTableName); - if (!string.IsNullOrEmpty(jsonData)) + foreach (var column in cols) { - try - { - ret = JsonSerializer.Deserialize>(jsonData, _serializerOption); - } - catch { } - if(ret != null) + var item = items.FirstOrDefault(i => i.Name == column.Name); + if (item != null) { - foreach (var i in ret) + column.Visible = item.Visible; + if (!string.IsNullOrEmpty(item.DisplayName)) { - var col = cols.FirstOrDefault(d => d.Name == i.Name && d.DisplayName == i.DisplayName); - if (col != null) - { - col.Visible = i.Visible; - } + column.DisplayName = item.DisplayName; } } } } - if (items != null) + else if (!string.IsNullOrEmpty(ClientTableName)) { + // 读取浏览器配置 + var clientColumns = await InvokeAsync>("reloadColumnList", ClientTableName); + clientColumns ??= []; foreach (var column in cols) { - var item = items.FirstOrDefault(i => i.Name == column.Name); + var item = clientColumns.FirstOrDefault(i => i.Name == column.Name); if (item != null) { column.Visible = item.Visible; - if (!string.IsNullOrEmpty(item.DisplayName)) - { - column.DisplayName = item.DisplayName; - } } } } From 3658225a28dae613cbd71eb56fa7a4d1bc8da0ef Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 17:13:30 +0800 Subject: [PATCH 08/13] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Converter/JsonQueryPageOptionConverter.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/BootstrapBlazor/Converter/JsonQueryPageOptionConverter.cs b/src/BootstrapBlazor/Converter/JsonQueryPageOptionConverter.cs index 27d6d433591..d4c9620a95e 100644 --- a/src/BootstrapBlazor/Converter/JsonQueryPageOptionConverter.cs +++ b/src/BootstrapBlazor/Converter/JsonQueryPageOptionConverter.cs @@ -20,7 +20,6 @@ public class JsonQueryPageOptionsConverter : JsonConverter /// /// /// - /// public override QueryPageOptions? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var ret = new QueryPageOptions(); @@ -203,7 +202,6 @@ public class JsonQueryPageOptionsConverter : JsonConverter /// /// /// - /// public override void Write(Utf8JsonWriter writer, QueryPageOptions value, JsonSerializerOptions options) { writer.WriteStartObject(); From 1efa7ac8e5e5ac946329b01a1ccdd607252c0532 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 17:13:48 +0800 Subject: [PATCH 09/13] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj b/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj index e0857031338..26642cca3e4 100644 --- a/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj +++ b/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj @@ -44,7 +44,7 @@ - + From a0810c39546b48f52e486570a6e35784874289db Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 18:54:55 +0800 Subject: [PATCH 10/13] =?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 --- .../Converters/JsonDescriptionEnumConverterTest.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/test/UnitTest/Converters/JsonDescriptionEnumConverterTest.cs b/test/UnitTest/Converters/JsonDescriptionEnumConverterTest.cs index 26a0aa7ffa2..501af82a3ff 100644 --- a/test/UnitTest/Converters/JsonDescriptionEnumConverterTest.cs +++ b/test/UnitTest/Converters/JsonDescriptionEnumConverterTest.cs @@ -52,6 +52,19 @@ public void JsonEnumConverter_Ok() Assert.Equal("\"\"", json); } + [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 item1 = JsonSerializer.Deserialize(json); + Assert.Equal("name", item1.Name); + Assert.True(item1.Visible); + } + [JsonConverter(typeof(JsonDescriptionEnumConverter))] public enum TestEnum { @@ -100,5 +113,4 @@ public enum EnumBarcodeTextFontOption [Description("bold italic")] Bold_Italic, } - } From 5c75c7a840af396f5c81a9cbb8f4199e7a8593f9 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 18:55:11 +0800 Subject: [PATCH 11/13] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20ReloadColumn?= =?UTF-8?q?VisibleFromBrowserAsync=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/Table.razor.cs | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index 894925b4044..a5725fb5f70 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -1123,6 +1123,24 @@ private async Task OnTableRenderAsync(bool firstRender) private readonly JsonSerializerOptions _serializerOption = new(JsonSerializerDefaults.Web); + private async Task ReloadColumnVisibleFromBrowserAsync() + { + if (!string.IsNullOrEmpty(ClientTableName)) + { + // 读取浏览器配置 + var clientColumns = await InvokeAsync>("reloadColumnList", ClientTableName); + clientColumns ??= []; + foreach (var column in _visibleColumns) + { + var item = clientColumns.FirstOrDefault(i => i.Name == column.Name); + if (item != null) + { + column.Visible = item.Visible; + } + } + } + } + private async Task ReloadColumnWidthFromBrowserAsync(List columns) { List? ret = null; @@ -1209,6 +1227,8 @@ private async Task ProcessFirstRender() await InternalResetVisibleColumns(cols); + await ReloadColumnVisibleFromBrowserAsync(); + Columns.Clear(); Columns.AddRange(cols.OrderFunc()); @@ -1276,20 +1296,6 @@ private async Task InternalResetVisibleColumns(List columns, IEnum } } } - else if (!string.IsNullOrEmpty(ClientTableName)) - { - // 读取浏览器配置 - var clientColumns = await InvokeAsync>("reloadColumnList", ClientTableName); - clientColumns ??= []; - foreach (var column in cols) - { - var item = clientColumns.FirstOrDefault(i => i.Name == column.Name); - if (item != null) - { - column.Visible = item.Visible; - } - } - } _visibleColumns.Clear(); _visibleColumns.AddRange(cols); } From df533b3599b43574a0500274621806f587fb2f21 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 19:09:09 +0800 Subject: [PATCH 12/13] =?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 | 7 +++++++ test/UnitTest/Utils/UtilityTest.cs | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 80a1235754e..4785b88ec95 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -731,6 +731,12 @@ public void ResetFilter_Null() [Fact] public async Task ShowColumnList_Ok() { + // 设置客户端存储 + Context.JSInterop.Setup>("reloadColumnList", "test").SetResult( + [ + new("Name", false), + new("Address", true) + ]); var show = false; var localizer = Context.Services.GetRequiredService>(); var cut = Context.RenderComponent(pb => @@ -764,6 +770,7 @@ public async Task ShowColumnList_Ok() builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Address", typeof(string))); builder.CloseComponent(); }); + pb.Add(a => a.ClientTableName, "test"); }); }); cut.Contains("Test_Column_List"); diff --git a/test/UnitTest/Utils/UtilityTest.cs b/test/UnitTest/Utils/UtilityTest.cs index a0ce8f0a1d7..994db7cc03b 100644 --- a/test/UnitTest/Utils/UtilityTest.cs +++ b/test/UnitTest/Utils/UtilityTest.cs @@ -389,7 +389,7 @@ public void GetJsonStringByTypeName_UseKeyWhenValueIsNull() // improve code coverage var option = Context.Services.GetRequiredService>().Value; option.UseKeyWhenValueIsNull = true; - var items = Utility.GetJsonStringByTypeName(option, this.GetType().Assembly, "UnitTest.Utils.UtilityTest", "en-US", true); + var items = Utility.GetJsonStringByTypeName(option, GetType().Assembly, "UnitTest.Utils.UtilityTest", "en-US", true); var test1 = items.FirstOrDefault(i => i.Name == "Test-Null"); Assert.NotNull(test1); From d7318c14c2e2eee8bface2020ae3161c09efef27 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Mon, 27 Oct 2025 19:19:36 +0800 Subject: [PATCH 13/13] chore: bump version 9.11.5-beta08 Co-Authored-By: braia123 <225503484+braia123@users.noreply.github.com> --- src/BootstrapBlazor/BootstrapBlazor.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 58bb76a12db..22c8680ebc7 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,11 +1,11 @@  - 9.11.5-beta07 + 9.11.5-beta08 - 10.0.0-rc.2.1.6 + 10.0.0-rc.2.1.7