From 6d8e12022294316597f8eef952ae908621a7153f Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 25 Nov 2025 17:35:42 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix(Table):=20=E5=88=97=E8=A2=AB=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E5=86=8D=E5=8F=96=E6=B6=88=E9=9A=90=E8=97=8F=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E6=8B=96=E5=8A=A8=E5=88=97=E6=94=B9=E5=8F=98=E5=88=97?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=E7=9A=84=E5=8A=9F=E8=83=BD=E4=B8=8D=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=20#7176?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BootstrapBlazor.Server.csproj | 2 +- .../Components/Table/Table.razor.Checkbox.cs | 9 +++++++++ .../Components/Table/Table.razor.cs | 6 ++++++ .../Components/Table/Table.razor.js | 14 ++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj b/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj index 0a03cae2be4..33a97330912 100644 --- a/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj +++ b/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj @@ -62,7 +62,7 @@ - + diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs index 523ca00db49..13173cd502a 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs @@ -143,6 +143,11 @@ protected async Task OnCheck(CheckboxState state, TItem val) /// private bool _resetColumns; + /// + /// 是否重置列拖拽事件 方法中重置为 false + /// + private bool _resetColDragListener; + /// /// 获得/设置 列改变显示状态回调方法 /// @@ -155,6 +160,10 @@ private async Task OnToggleColumnVisible(string columnName, bool visible) { _resetColumns = true; } + if (AllowDragColumn && visible) + { + _resetColDragListener = true; + } if (!string.IsNullOrEmpty(ClientTableName)) { await InvokeVoidAsync("saveColumnList", ClientTableName, _visibleColumns); diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index da31d71752d..fd7ec0cba25 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -1042,6 +1042,12 @@ protected override async Task OnAfterRenderAsync(bool firstRender) await InvokeVoidAsync("resetColumn", Id); } + if (_resetColDragListener) + { + _resetColDragListener= false; + await InvokeVoidAsync("resetColDragListener", Id); + } + if (_bindResizeColumn) { _bindResizeColumn = false; diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.js b/src/BootstrapBlazor/Components/Table/Table.razor.js index f3375ea9e12..82e1edbeb25 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.js +++ b/src/BootstrapBlazor/Components/Table/Table.razor.js @@ -180,6 +180,13 @@ export function resetColumn(id) { } } +export function resetColDragListener(id) { + const table = Data.get(id) + if (table) { + setDraggable(table) + } +} + export function bindResizeColumn(id) { const table = Data.get(id) if (table) { @@ -924,6 +931,13 @@ const setDraggable = table => { let index = 0 table.dragColumns = [...table.tables[0].querySelectorAll('thead > tr > th')].filter(i => i.draggable) table.dragColumns.forEach(col => { + EventHandler.off(col, 'dragstart') + EventHandler.off(col, 'dragend') + EventHandler.off(col, 'drop') + EventHandler.off(col, 'dragenter') + EventHandler.off(col, 'dragover') + EventHandler.off(col, 'dragleave') + EventHandler.on(col, 'dragstart', e => { col.parentNode.classList.add('table-dragging') col.classList.add('table-drag') From 651287593ac74e1a76f7c1ab006bf3973b1388e6 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 26 Nov 2025 15:34:59 +0800 Subject: [PATCH 2/4] =?UTF-8?q?refactor:=20=E5=A4=8D=E7=94=A8=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= 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, 2 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.js b/src/BootstrapBlazor/Components/Table/Table.razor.js index 82e1edbeb25..7dcc8da08e4 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.js +++ b/src/BootstrapBlazor/Components/Table/Table.razor.js @@ -1,4 +1,4 @@ -export { getResponsive } from '../../modules/responsive.js' +export { getResponsive } from '../../modules/responsive.js' import { copy, drag, getDescribedElement, getOuterHeight, getWidth, isVisible } from '../../modules/utility.js' import '../../modules/browser.js' import Data from '../../modules/data.js' @@ -931,12 +931,7 @@ const setDraggable = table => { let index = 0 table.dragColumns = [...table.tables[0].querySelectorAll('thead > tr > th')].filter(i => i.draggable) table.dragColumns.forEach(col => { - EventHandler.off(col, 'dragstart') - EventHandler.off(col, 'dragend') - EventHandler.off(col, 'drop') - EventHandler.off(col, 'dragenter') - EventHandler.off(col, 'dragover') - EventHandler.off(col, 'dragleave') + disposeDragColumns(col); EventHandler.on(col, 'dragstart', e => { col.parentNode.classList.add('table-dragging') From 850f4d567fa96f3361e2f890fc12dcb683f1821b Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 26 Nov 2025 16:09:33 +0800 Subject: [PATCH 3/4] =?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 | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index b46ea538077..4fee16b1206 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -8476,6 +8476,8 @@ public async Task AllowDragColumn_Ok() { pb.Add(a => a.RenderMode, TableRenderMode.Table); pb.Add(a => a.AllowDragColumn, true); + pb.Add(a => a.ShowToolbar, true); + pb.Add(a => a.ShowColumnList, true); pb.Add(a => a.ClientTableName, "table-unit-test"); pb.Add(a => a.OnQueryAsync, OnQueryAsync(localizer)); pb.Add(a => a.OnDragColumnEndAsync, (fieldName, columns) => @@ -8490,9 +8492,14 @@ public async Task AllowDragColumn_Ok() builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string))); builder.CloseComponent(); - builder.OpenComponent>(0); - builder.AddAttribute(3, "Field", "Address"); - builder.AddAttribute(4, "FieldExpression", Utility.GenerateValueExpression(foo, "Address", typeof(string))); + builder.OpenComponent>(3); + builder.AddAttribute(4, "Field", "Address"); + builder.AddAttribute(5, "FieldExpression", Utility.GenerateValueExpression(foo, "Address", typeof(string))); + builder.CloseComponent(); + + builder.OpenComponent>(6); + builder.AddAttribute(7, "Field", foo.Count); + builder.AddAttribute(8, "FieldExpression", Utility.GenerateValueExpression(foo, "Count", typeof(int))); builder.CloseComponent(); }); }); @@ -8511,8 +8518,14 @@ await cut.InvokeAsync(async () => Assert.Contains("地址", columns[0].InnerHtml); Assert.Contains("姓名", columns[1].InnerHtml); - await table.Instance.DragColumnCallback(2, 3); + await table.Instance.DragColumnCallback(2, 4); }); + + // 更改可见列 + var checkbox = cut.Find(".dropdown-item .form-check-input"); + + await cut.InvokeAsync(() => checkbox.Click()); + await cut.InvokeAsync(() => checkbox.Click()); } [Fact] From 7e71b20ae31c37a69404a4bff17d72c4a93aa5da Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 26 Nov 2025 16:18:25 +0800 Subject: [PATCH 4/4] =?UTF-8?q?test:=20=E9=87=8D=E6=9E=84=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 | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 4fee16b1206..84285c06379 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -8509,16 +8509,16 @@ public async Task AllowDragColumn_Ok() await cut.InvokeAsync(async () => { await table.Instance.DragColumnCallback(1, 0); - Assert.Equal("Address", name); }); + Assert.Equal("Address", name); + + var columns = cut.FindAll("th"); + Assert.Contains("地址", columns[0].InnerHtml); + Assert.Contains("姓名", columns[1].InnerHtml); await cut.InvokeAsync(async () => { - var columns = cut.FindAll("th"); - Assert.Contains("地址", columns[0].InnerHtml); - Assert.Contains("姓名", columns[1].InnerHtml); - - await table.Instance.DragColumnCallback(2, 4); + await table.Instance.DragColumnCallback(2, 3); }); // 更改可见列 @@ -8526,6 +8526,11 @@ await cut.InvokeAsync(async () => await cut.InvokeAsync(() => checkbox.Click()); await cut.InvokeAsync(() => checkbox.Click()); + + await cut.InvokeAsync(async () => + { + await table.Instance.DragColumnCallback(3, 4); + }); } [Fact]