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..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'
@@ -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,8 @@ const setDraggable = table => {
let index = 0
table.dragColumns = [...table.tables[0].querySelectorAll('thead > tr > th')].filter(i => i.draggable)
table.dragColumns.forEach(col => {
+ disposeDragColumns(col);
+
EventHandler.on(col, 'dragstart', e => {
col.parentNode.classList.add('table-dragging')
col.classList.add('table-drag')
diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs
index b46ea538077..84285c06379 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();
});
});
@@ -8502,17 +8509,28 @@ 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, 3);
});
+
+ // 更改可见列
+ var checkbox = cut.Find(".dropdown-item .form-check-input");
+
+ await cut.InvokeAsync(() => checkbox.Click());
+ await cut.InvokeAsync(() => checkbox.Click());
+
+ await cut.InvokeAsync(async () =>
+ {
+ await table.Instance.DragColumnCallback(3, 4);
+ });
}
[Fact]