From 50fabdca45970ede9366505fe7f7aea838657f0f Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 7 Apr 2026 10:03:56 +0800 Subject: [PATCH 1/3] =?UTF-8?q?revert:=20=E6=92=A4=E9=94=80=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=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.js | 65 +++++-------------- 1 file changed, 15 insertions(+), 50 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.js b/src/BootstrapBlazor/Components/Table/Table.razor.js index 5ef90a21d8a..8b0922b13c9 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.js +++ b/src/BootstrapBlazor/Components/Table/Table.razor.js @@ -536,41 +536,24 @@ const setExcelKeyboardListener = table => { } const resetTableWidth = table => { - const { options: { scrollWidth } } = table; table.tables.forEach(t => { const group = [...t.children].find(i => i.nodeName === 'COLGROUP') if (group) { - const colgroup = getLastColgroup(t, group); - if (colgroup) { - colgroup.style = null; - } - const width = getTableWidthByColumnGroup(t, 100); - if (width >= t.parentElement.offsetWidth + scrollWidth) { - t.style.width = `${width}px`; - } - else { - t.style.width = null; - } + let width = 0; + [...group.children].forEach(col => { + let colWidth = parseInt(col.style.width); + if (isNaN(colWidth)) { + colWidth = 100; + } + width += colWidth; + }) + t.style.width = `${width}px`; saveColumnWidth(table); } }) } -const getLastColgroup = (table, group) => { - const p = table.parentElement; - if (p) { - const length = group.children.length; - if (p.classList.contains("table-fixed-header")) { - return group.children[length - 2]; - } - else { - return group.children[length - 1]; - } - } - return null; -} - const setResizeListener = table => { if (table.options.showColumnWidthTooltip) { table.handlers.setResizeHandler = e => { @@ -1064,33 +1047,15 @@ const saveColumnWidth = table => { })); } -const getTableWidthByColumnGroup = (table, defaultWidth) => { - return [...table.querySelectorAll('colgroup col')] - .map((col, index) => getColumnRenderWidth(table, col, index, defaultWidth)) - .reduce((accumulator, val) => accumulator + val, 0); -} - -const getColumnRenderWidth = (table, col, index, defaultWidth) => { - let width = parseFloat(col.style.width); - if (!isNaN(width) && width > 0) { - return width; - } - - const header = table.querySelectorAll('thead > tr:last-child > th').item(index); - width = header?.offsetWidth ?? 0; - if (width > 0) { - return width; - } - - const row = [...table.querySelectorAll('tbody > tr')].find(i => !i.classList.contains('is-detail')); - width = row?.children.item(index)?.offsetWidth ?? 0; - return width > 0 ? width : defaultWidth; -} - const setTableDefaultWidth = table => { if (table.tables.length > 0 && isVisible(table.tables[0])) { const { scrollWidth, columnMinWidth } = table.options; - const tableWidth = getTableWidthByColumnGroup(table.tables[0], columnMinWidth); + const tableWidth = [...table.tables[0].querySelectorAll('col')] + .map(i => { + const colWidth = parseFloat(i.style.width); + return isNaN(colWidth) ? columnMinWidth : colWidth; + }) + .reduce((accumulator, val) => accumulator + val, 0); if (tableWidth > table.el.offsetWidth) { table.tables[0].style.setProperty('width', `${tableWidth}px`); From dc20749f9b28fc9a748e1d0c9a4cb6b2601c7956 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 7 Apr 2026 10:21:54 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E5=88=B7=E6=96=B0=E8=AF=BB=E5=8F=96=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E9=85=8D=E7=BD=AE=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 | 2 +- .../Components/Table/Table.razor.cs | 118 ++++++++++-------- 2 files changed, 68 insertions(+), 52 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor b/src/BootstrapBlazor/Components/Table/Table.razor index 7e058ada398..11d1c346e75 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor +++ b/src/BootstrapBlazor/Components/Table/Table.razor @@ -8,7 +8,7 @@ @TableColumns?.Invoke(CreateTItem()) - @if (FirstRender) + @if (_firstRender) { if (ShowSkeleton) { diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index a4223f94d00..d6ca5022bc2 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -1091,11 +1091,7 @@ private void OnInitParameters() SearchModel ??= CreateSearchModel(); } - /// - /// 获得/设置 是否为第一次 Render - /// Gets or sets Whether it is the first Render - /// - protected bool FirstRender { get; set; } = true; + private bool _firstRender = true; /// /// 获得/设置 自动刷新 CancellationTokenSource 实例 @@ -1140,7 +1136,7 @@ protected override void OnParametersSet() IsTree = false; } - if (!FirstRender) + if (!_firstRender) { // 动态列模式 ResetDynamicContext(); @@ -1153,6 +1149,21 @@ protected override void OnParametersSet() _searchItems = null; } + /// + /// + /// + /// + protected override async Task OnParametersSetAsync() + { + await base.OnParametersSetAsync(); + + if (!_firstRender) + { + // 重新读取浏览器设置 + await OnTableColumnReset(); + } + } + /// /// /// @@ -1237,6 +1248,54 @@ protected override async Task OnAfterRenderAsync(bool firstRender) } } + private async Task OnTableColumnReset() + { + // 动态列模式 + var cols = new List(); + if (DynamicContext != null && typeof(TItem).IsAssignableTo(typeof(IDynamicObject))) + { + cols.AddRange(DynamicContext.GetColumns()); + } + else if (AutoGenerateColumns) + { + cols.AddRange(Utility.GetTableColumns(Columns)); + } + else + { + cols.AddRange(Columns); + } + + if (ColumnOrderCallback != null) + { + cols = [.. ColumnOrderCallback(cols)]; + } + + await ReloadColumnOrdersFromBrowserAsync(cols); + + // 查看是否开启列宽序列化 + await ReloadColumnWidthFromBrowserAsync(cols); + + if (OnColumnCreating != null) + { + await OnColumnCreating(cols); + } + + InternalResetVisibleColumns(cols); + + await ReloadColumnVisibleFromBrowserAsync(); + + Columns.Clear(); + Columns.AddRange(cols.OrderFunc()); + + // set default sortName + var col = Columns.Find(i => i is { Sortable: true, DefaultSort: true }); + if (col != null) + { + SortName = col.GetFieldName(); + SortOrder = col.DefaultSortOrder; + } + } + private async Task OnTableRenderAsync(bool firstRender) { if (firstRender) @@ -1372,52 +1431,9 @@ private async Task ProcessFirstRender() IsLoading = true; // 设置渲染完毕 - FirstRender = false; - - // 动态列模式 - var cols = new List(); - if (DynamicContext != null && typeof(TItem).IsAssignableTo(typeof(IDynamicObject))) - { - cols.AddRange(DynamicContext.GetColumns()); - } - else if (AutoGenerateColumns) - { - cols.AddRange(Utility.GetTableColumns(Columns)); - } - else - { - cols.AddRange(Columns); - } + _firstRender = false; - if (ColumnOrderCallback != null) - { - cols = [.. ColumnOrderCallback(cols)]; - } - - await ReloadColumnOrdersFromBrowserAsync(cols); - - // 查看是否开启列宽序列化 - await ReloadColumnWidthFromBrowserAsync(cols); - - if (OnColumnCreating != null) - { - await OnColumnCreating(cols); - } - - InternalResetVisibleColumns(cols); - - await ReloadColumnVisibleFromBrowserAsync(); - - Columns.Clear(); - Columns.AddRange(cols.OrderFunc()); - - // set default sortName - var col = Columns.Find(i => i is { Sortable: true, DefaultSort: true }); - if (col != null) - { - SortName = col.GetFieldName(); - SortOrder = col.DefaultSortOrder; - } + await OnTableColumnReset(); // 获取是否自动查询参数值 _autoQuery = IsAutoQueryFirstRender; From d32be5801dd708cfbf646671c228201273eb63a4 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 7 Apr 2026 10:42:06 +0800 Subject: [PATCH 3/3] chore: bump version 10.5.1-beta06 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 3b05380e730..77c0fe52a3c 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 10.5.1-beta05 + 10.5.1-beta06