diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index ffc0befac1c..83e167868de 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -4885,7 +4885,7 @@ "Affix": "Affix", "Watermark": "Watermark", "OctIcon": "Oct Icons", - "UniverIcons": "Univer Icons", + "UniverIcon": "Univer Icons", "Typed": "Typed", "UniverSheet": "UniverSheet" }, diff --git a/src/BootstrapBlazor/Components/Table/Table.razor b/src/BootstrapBlazor/Components/Table/Table.razor index e083fb21aac..fa641db7af3 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor +++ b/src/BootstrapBlazor/Components/Table/Table.razor @@ -369,13 +369,13 @@ { @if (Items != null) { - + } else { } diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs index 7b60864524d..29e55f1ca13 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs @@ -484,7 +484,7 @@ protected async Task QueryData(bool triggerByPagination = false) else { ResetSelectedRows(Items); - RowsCache = null; + _rowsCache = null; } return; @@ -513,7 +513,7 @@ async Task OnQuery(QueryPageOptions queryOption) } // 更新数据后清除缓存防止新数据不显示 - RowsCache = null; + _rowsCache = null; return; void ProcessData() diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs index ccd68e7bafe..4512128113e 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs @@ -648,7 +648,7 @@ protected async Task SaveModelAsync(EditContext context, ItemChangedType c if (DynamicContext != null) { await DynamicContext.SetValue(context.Model); - RowsCache = null; + _rowsCache = null; valid = true; } else @@ -1095,7 +1095,7 @@ private void ResetDynamicContext() private void QueryDynamicItems(QueryPageOptions queryOption, IDynamicObjectContext? context) { - RowsCache = null; + _rowsCache = null; if (context != null) { var items = context.GetItems(); diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.TreeNode.cs b/src/BootstrapBlazor/Components/Table/Table.razor.TreeNode.cs index 86b54b8e97c..73f0ebd5b63 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.TreeNode.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.TreeNode.cs @@ -28,7 +28,6 @@ public partial class Table /// /// 获得/设置 树形数据集合 /// - [NotNull] private List> TreeRows { get; } = new(100); /// @@ -107,7 +106,7 @@ protected Func ToggleTreeRow(TItem item) => async () => IsLoadChildren = false; // 清除缓存 - RowsCache = null; + _rowsCache = null; // 更新 UI StateHasChanged(); @@ -121,6 +120,7 @@ private async Task>> GetChildrenRowAsync(Tabl { throw new InvalidOperationException(NotSetOnTreeExpandErrorMessage); } + return await OnTreeExpand(node.Value); } } diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index 1f308c337c8..8cdc51453ff 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -370,6 +370,13 @@ private string GetSortTooltip(ITableColumn col) => SortName != col.GetFieldName( [Parameter] public float RowHeight { get; set; } = 38f; + /// + /// Gets or sets the overscan count for virtual scrolling. Default is 10. + /// + /// Effective when is set to . + [Parameter] + public int OverscanCount { get; set; } = 10; + [Inject] [NotNull] private IOptionsMonitor? Options { get; set; } @@ -928,7 +935,7 @@ protected override void OnParametersSet() IsPagination = false; } - RowsCache = null; + _rowsCache = null; if (IsExcel) { @@ -1267,7 +1274,7 @@ protected async Task LoopQueryAsync() private IEnumerable QueryItems { get; set; } = []; [NotNull] - private List? RowsCache { get; set; } + private List? _rowsCache = null; /// /// 获得 当前表格所有 Rows 集合 @@ -1279,8 +1286,8 @@ public List Rows // https://gitee.com/LongbowEnterprise/BootstrapBlazor/issues/I5JG5D // 如果 QueryItems 无默认值 // 页面 OnInitializedAsync 二刷再 OnAfterRender 过程中导致 QueryItems 变量为空 ToList 报错 - RowsCache ??= IsTree ? TreeRows.GetAllItems() : [.. (Items ?? QueryItems)]; - return RowsCache; + _rowsCache ??= IsTree ? TreeRows.GetAllItems() : [.. (Items ?? QueryItems)]; + return _rowsCache; } } diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 1efe834925f..3062ed46c8f 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -2104,6 +2104,7 @@ public void IsFixedFooter_Ok() pb.Add(a => a.RenderMode, TableRenderMode.Table); pb.Add(a => a.ScrollMode, ScrollMode.Virtual); pb.Add(a => a.RowHeight, 39.5f); + pb.Add(a => a.OverscanCount, 10); pb.Add(a => a.ShowFooter, true); pb.Add(a => a.IsFixedFooter, true); pb.Add(a => a.Items, Foo.GenerateFoo(localizer));