diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index e117011b19f..276927983a0 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -1065,7 +1065,7 @@ private async Task OnTableRenderAsync(bool firstRender) await InvokeVoidAsync("init", Id, Interop, new { DragColumnCallback = nameof(DragColumnCallback), - AutoFitContentCallback = OnAutoFitContentAsync == null ? null : nameof(AutoFitContentCallback), + AutoFitColumnWidthCallback = OnAutoFitColumnWidthCallback == null ? null : nameof(AutoFitColumnWidthCallback), ResizeColumnCallback = OnResizeColumnAsync != null ? nameof(ResizeColumnCallback) : null, ColumnMinWidth = ColumnMinWidth ?? Options.CurrentValue.TableSettings.ColumnMinWidth, ScrollWidth = ActualScrollWidth, @@ -1588,7 +1588,15 @@ private async Task OnContextMenu(MouseEventArgs e, TItem item) /// 获得/设置 自动调整列宽回调方法 /// [Parameter] - public Func>? OnAutoFitContentAsync { get; set; } + [Obsolete("已弃用,请使用 OnAutoFitColumnWidthCallback 替代; Deprecated, please use OnAutoFitColumnWidthCallback instead")] + [ExcludeFromCodeCoverage] + public Func>? OnAutoFitContentAsync { get; set; } + + /// + /// 获得/设置 自动调整列宽回调方法 + /// + [Parameter] + public Func>? OnAutoFitColumnWidthCallback { get; set; } /// /// 列宽自适应方法 @@ -1648,14 +1656,15 @@ public async Task ResizeColumnCallback(int index, float width) /// 列宽自适应回调方法 由 JavaScript 脚本调用 /// /// 当前列名称 + /// 当前列宽 /// [JSInvokable] - public async Task AutoFitContentCallback(string fieldName) + public async Task AutoFitColumnWidthCallback(string fieldName, float calcWidth) { float ret = 0; - if (OnAutoFitContentAsync != null) + if (OnAutoFitColumnWidthCallback != null) { - ret = await OnAutoFitContentAsync(fieldName); + ret = await OnAutoFitColumnWidthCallback(fieldName, calcWidth); } return ret; } diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.js b/src/BootstrapBlazor/Components/Table/Table.razor.js index e68aaf3e617..ec7bad09e1b 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.js +++ b/src/BootstrapBlazor/Components/Table/Table.razor.js @@ -726,10 +726,6 @@ const indexOfCol = col => { const autoFitColumnWidth = async (table, col) => { const field = col.getAttribute('data-bb-field'); - let widthValue = 0; - if (table.options.autoFitContentCallback !== null) { - widthValue = await table.invoke.invokeMethodAsync(table.options.autoFitContentCallback, field); - } const index = indexOfCol(col); let rows = null; @@ -740,12 +736,17 @@ const autoFitColumnWidth = async (table, col) => { rows = table.tables[0].querySelectorAll('table > tbody > tr:not(.is-detail)'); } - let maxWidth = widthValue; - if (maxWidth === 0) { - [...rows].forEach(row => { - const cell = row.cells[index]; - maxWidth = Math.max(maxWidth, calcCellWidth(cell)); - }); + let maxWidth = 0; + [...rows].forEach(row => { + const cell = row.cells[index]; + maxWidth = Math.max(maxWidth, calcCellWidth(cell)); + }); + + if (table.options.autoFitColumnWidthCallback !== null) { + const widthValue = await table.invoke.invokeMethodAsync(table.options.autoFitColumnWidthCallback, field, maxWidth); + if (widthValue > 0) { + maxWidth = widthValue; + } } if (maxWidth > 0) { diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index a555ac584b0..b8deef99e9a 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -8371,7 +8371,7 @@ public void ShowRowCheckboxCallback_Ok() } [Fact] - public async Task AutoFitContentCallback_Ok() + public async Task OnAutoFitColumnWidthCallback_Ok() { var name = ""; var localizer = Context.Services.GetRequiredService>(); @@ -8383,10 +8383,11 @@ public async Task AutoFitContentCallback_Ok() pb.Add(a => a.AllowDragColumn, true); pb.Add(a => a.ClientTableName, "table-unit-test"); pb.Add(a => a.OnQueryAsync, OnQueryAsync(localizer)); - pb.Add(a => a.OnAutoFitContentAsync, fieldName => + pb.Add(a => a.OnAutoFitColumnWidthCallback, (fieldName, calcWidth) => { name = fieldName; - return Task.FromResult(100.65f); + var resWidth = Math.Max(100.65f, calcWidth); + return Task.FromResult(resWidth); }); pb.Add(a => a.TableColumns, foo => builder => { @@ -8405,7 +8406,7 @@ public async Task AutoFitContentCallback_Ok() var table = cut.FindComponent>(); float v = 0f; - await cut.InvokeAsync(async () => v = await table.Instance.AutoFitContentCallback("DateTime")); + await cut.InvokeAsync(async () => v = await table.Instance.AutoFitColumnWidthCallback("DateTime", 90)); Assert.Equal(100.65f, v); }