From 83f4a4d9f7c61bd726bcdd7b3d8c10655a0c1fad Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 14 Feb 2026 10:09:23 +0800 Subject: [PATCH 1/7] =?UTF-8?q?refactor:=20=E8=B0=83=E6=95=B4=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=AE=BD=E5=BA=A6=E9=98=B2=E6=AD=A2=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E6=8A=98=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Select/SelectTable.razor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Select/SelectTable.razor.js b/src/BootstrapBlazor/Components/Select/SelectTable.razor.js index ea17546e99f..b9e20d337d0 100644 --- a/src/BootstrapBlazor/Components/Select/SelectTable.razor.js +++ b/src/BootstrapBlazor/Components/Select/SelectTable.razor.js @@ -10,7 +10,7 @@ export function init(id, invoke) { } const setWidth = () => { - const minWidth = parseFloat(el.dataset.bbMinWidth || '580'); + const minWidth = parseFloat(el.dataset.bbMinWidth || '602'); let width = getWidth(el); if (width < minWidth) { width = minWidth; From 73ab0404453be25169e7894cee48444201f5b7a6 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 14 Feb 2026 10:09:41 +0800 Subject: [PATCH 2/7] feat(SelectTable): add ShowToolbar parameter --- .../Components/Select/SelectTable.razor | 4 +++ .../Components/Select/SelectTable.razor.cs | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/BootstrapBlazor/Components/Select/SelectTable.razor b/src/BootstrapBlazor/Components/Select/SelectTable.razor index 2030f8ac355..359ed7e98ae 100644 --- a/src/BootstrapBlazor/Components/Select/SelectTable.razor +++ b/src/BootstrapBlazor/Components/Select/SelectTable.razor @@ -80,6 +80,10 @@ IsPagination="IsPagination" PageItemsSource="PageItemsSource" ShowGotoNavigator="false" MaxPageLinkCount="3" OnClickRowCallback="OnClickRowCallback" OnQueryAsync="OnQueryAsync" IsMultipleSelect="IsMultipleSelect" @bind-SelectedRows="SelectedItems" + ShowToolbar="ShowToolbar" ToolbarTemplate="ToolbarTemplate" + TableExtensionToolbarBeforeTemplate="TableExtensionToolbarBeforeTemplate" + TableExtensionToolbarTemplate="TableExtensionToolbarTemplate" + ShowDefaultButtons="false" ShowRefresh="false" ShowEmpty="ShowEmpty" EmptyTemplate="EmptyTemplate"> diff --git a/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs b/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs index f7f976dd469..37b3d85a4dd 100644 --- a/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs +++ b/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs @@ -139,6 +139,41 @@ namespace BootstrapBlazor.Components; [Parameter] public string? MultiSelectedItemMaxWidth { get; set; } + /// + /// 获得/设置 是否显示工具栏 默认 false 不显示 + /// Gets or sets Whether to show toolbar. Default false + /// + [Parameter] + public bool ShowToolbar { get; set; } + + /// + /// 获得/设置 表格 Toolbar 工具栏模板 + /// Gets or sets the table toolbar template, content appears center of toolbar + /// + [Parameter] + public RenderFragment? ToolbarTemplate { get; set; } + + /// + /// 获得/设置 表格 Toolbar 工具栏右侧按钮模板,模板中内容出现在默认按钮前面 + /// Gets or sets the table toolbar right-side button template, content appears before the default buttons + /// + [Parameter] + public RenderFragment? TableExtensionToolbarBeforeTemplate { get; set; } + + /// + /// 获得/设置 表格 Toolbar 工具栏右侧按钮模板,模板中内容出现在默认按钮后面 + /// Gets or sets the table toolbar right-side button template, content appears after the default buttons + /// + [Parameter] + public RenderFragment? TableExtensionToolbarTemplate { get; set; } + + /// + /// 获得/设置 是否显示刷新按钮 默认为 true + /// Gets or sets Whether to show Refresh Button. Default true + /// + [Parameter] + public bool ShowRefresh { get; set; } = true; + /// /// 获得/设置 IIconTheme 服务实例 /// Gets or sets IIconTheme Service Instance From 5e0524967124a8aa3c5993bb594a665f79c99f42 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 14 Feb 2026 10:13:37 +0800 Subject: [PATCH 3/7] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Select/SelectTable.razor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs b/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs index 37b3d85a4dd..db01d0d111e 100644 --- a/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs +++ b/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs @@ -88,8 +88,8 @@ namespace BootstrapBlazor.Components; public bool ShowAppendArrow { get; set; } = true; /// - /// 获得/设置 弹窗表格最小宽度 默认为 null 未设置使用样式中的默认值 - /// Gets or sets Dropdown Table Min Width. Default null (use style default) + /// 获得/设置 弹窗表格最小宽度 默认为 null 未设置使用样式中的默认值 602px + /// Gets or sets Dropdown Table Min Width. Default null (use style default 602px) /// [Parameter] public int? TableMinWidth { get; set; } From 17808891f4ffb12d8e31dd3fde15d41a05be1fe4 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 14 Feb 2026 10:14:01 +0800 Subject: [PATCH 4/7] chore: bump version 10.3.3-beta01 --- 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 f16614e9a0d..8282d81085d 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 10.3.2 + 10.3.3-beta01 From 255da2f6be3198904fa3c581a26b42eac090e2d9 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 14 Feb 2026 10:16:20 +0800 Subject: [PATCH 5/7] =?UTF-8?q?test:=20=E6=9B=B4=E6=AD=A3=E5=8D=95?= =?UTF-8?q?=E8=AF=8D=E6=8B=BC=E5=86=99=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Empty/Empty.razor | 4 ++-- src/BootstrapBlazor/Components/Empty/Empty.razor.scss | 4 ++-- test/UnitTest/Components/SelectTableTest.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/BootstrapBlazor/Components/Empty/Empty.razor b/src/BootstrapBlazor/Components/Empty/Empty.razor index 0802c67189b..8631a5ccaaf 100644 --- a/src/BootstrapBlazor/Components/Empty/Empty.razor +++ b/src/BootstrapBlazor/Components/Empty/Empty.razor @@ -1,10 +1,10 @@ -@namespace BootstrapBlazor.Components +@namespace BootstrapBlazor.Components @inherits BootstrapComponentBase
@if (Template != null) { -
+
@Template
} diff --git a/src/BootstrapBlazor/Components/Empty/Empty.razor.scss b/src/BootstrapBlazor/Components/Empty/Empty.razor.scss index ce0fe20c024..25fc27962b8 100644 --- a/src/BootstrapBlazor/Components/Empty/Empty.razor.scss +++ b/src/BootstrapBlazor/Components/Empty/Empty.razor.scss @@ -1,4 +1,4 @@ -@use "../../wwwroot/scss/variables" as *; +@use "../../wwwroot/scss/variables" as *; .empty { --bb-empty-image-margin: #{$bb-empty-image-margin}; @@ -9,7 +9,7 @@ margin: var(--bb-empty-image-margin); } - .empty-telemplate { + .empty-template { margin: var(--bb-empty-template-margin); } } diff --git a/test/UnitTest/Components/SelectTableTest.cs b/test/UnitTest/Components/SelectTableTest.cs index fbf72f52506..5b42b65cf33 100644 --- a/test/UnitTest/Components/SelectTableTest.cs +++ b/test/UnitTest/Components/SelectTableTest.cs @@ -603,7 +603,7 @@ public void EmptyTemplate_OK() }); }); - cut.Contains("
empty-template
"); + cut.Contains("
empty-template
"); } [Fact] From 68adb28dc866730673e6e11146a9094e6002d113 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 14 Feb 2026 10:24:26 +0800 Subject: [PATCH 6/7] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=20Toolbar=20?= =?UTF-8?q?=E5=8D=95=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/SelectTableTest.cs | 59 +++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/test/UnitTest/Components/SelectTableTest.cs b/test/UnitTest/Components/SelectTableTest.cs index 5b42b65cf33..2536b5f262a 100644 --- a/test/UnitTest/Components/SelectTableTest.cs +++ b/test/UnitTest/Components/SelectTableTest.cs @@ -686,6 +686,65 @@ public async Task IsMultipleSelect_Ok() cut.Contains("multi-select-item-ph"); } + [Fact] + public void ToolbarTemplate_Ok() + { + var localizer = Context.Services.GetRequiredService>(); + var items = Foo.GenerateFoo(localizer); + var cut = Context.Render(pb => + { + pb.AddChildContent>(pb => + { + pb.Add(a => a.OnQueryAsync, options => + { + return Task.FromResult(new QueryData() + { + Items = items, + IsAdvanceSearch = true, + IsFiltered = true, + IsSearch = true, + IsSorted = true + }); + }); + pb.Add(a => a.GetTextCallback, foo => foo.Name); + pb.Add(a => a.TableColumns, foo => builder => + { + builder.OpenComponent>(0); + builder.AddAttribute(1, "Field", "Name"); + builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string))); + builder.AddAttribute(3, "Searchable", true); + builder.CloseComponent(); + }); + pb.Add(a => a.ShowToolbar, true); + pb.Add(a => a.ToolbarTemplate, builder => + { + builder.AddContent(0, "toolbar-template"); + }); + pb.Add(a => a.TableExtensionToolbarBeforeTemplate, builder => + { + builder.AddContent(0, "toolbar-extension-before-template"); + }); + pb.Add(a => a.TableExtensionToolbarTemplate, builder => + { + builder.AddContent(0, "toolbar-extension-template"); + }); + }); + }); + + cut.Contains("toolbar-template"); + cut.Contains("toolbar-extension-before-template"); + cut.Contains("toolbar-extension-template"); + + var table = cut.FindComponent>(); + table.Render(pb => + { + pb.Add(a => a.ShowToolbar, false); + }); + cut.DoesNotContain("toolbar-template"); + cut.DoesNotContain("toolbar-extension-before-template"); + cut.DoesNotContain("toolbar-extension-template"); + } + private static Task> OnFilterQueryAsync(QueryPageOptions options, IEnumerable _filterItems) { _filterItems = _filterItems.Where(options.ToFilterFunc()); From d121ffe77d4219f4b50c048da2e6e435a0271fcb Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 14 Feb 2026 10:29:48 +0800 Subject: [PATCH 7/7] =?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 --- .../Components/Select/SelectTable.razor | 1 - .../Components/Select/SelectTable.razor.cs | 14 -------------- test/UnitTest/Components/SelectTableTest.cs | 6 ------ 3 files changed, 21 deletions(-) diff --git a/src/BootstrapBlazor/Components/Select/SelectTable.razor b/src/BootstrapBlazor/Components/Select/SelectTable.razor index 359ed7e98ae..1f0029a5499 100644 --- a/src/BootstrapBlazor/Components/Select/SelectTable.razor +++ b/src/BootstrapBlazor/Components/Select/SelectTable.razor @@ -81,7 +81,6 @@ OnClickRowCallback="OnClickRowCallback" OnQueryAsync="OnQueryAsync" IsMultipleSelect="IsMultipleSelect" @bind-SelectedRows="SelectedItems" ShowToolbar="ShowToolbar" ToolbarTemplate="ToolbarTemplate" - TableExtensionToolbarBeforeTemplate="TableExtensionToolbarBeforeTemplate" TableExtensionToolbarTemplate="TableExtensionToolbarTemplate" ShowDefaultButtons="false" ShowRefresh="false" ShowEmpty="ShowEmpty" EmptyTemplate="EmptyTemplate"> diff --git a/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs b/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs index db01d0d111e..dd924d2c5ea 100644 --- a/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs +++ b/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs @@ -153,13 +153,6 @@ namespace BootstrapBlazor.Components; [Parameter] public RenderFragment? ToolbarTemplate { get; set; } - /// - /// 获得/设置 表格 Toolbar 工具栏右侧按钮模板,模板中内容出现在默认按钮前面 - /// Gets or sets the table toolbar right-side button template, content appears before the default buttons - /// - [Parameter] - public RenderFragment? TableExtensionToolbarBeforeTemplate { get; set; } - /// /// 获得/设置 表格 Toolbar 工具栏右侧按钮模板,模板中内容出现在默认按钮后面 /// Gets or sets the table toolbar right-side button template, content appears after the default buttons @@ -167,13 +160,6 @@ namespace BootstrapBlazor.Components; [Parameter] public RenderFragment? TableExtensionToolbarTemplate { get; set; } - /// - /// 获得/设置 是否显示刷新按钮 默认为 true - /// Gets or sets Whether to show Refresh Button. Default true - /// - [Parameter] - public bool ShowRefresh { get; set; } = true; - /// /// 获得/设置 IIconTheme 服务实例 /// Gets or sets IIconTheme Service Instance diff --git a/test/UnitTest/Components/SelectTableTest.cs b/test/UnitTest/Components/SelectTableTest.cs index 2536b5f262a..c39ab0c4127 100644 --- a/test/UnitTest/Components/SelectTableTest.cs +++ b/test/UnitTest/Components/SelectTableTest.cs @@ -720,10 +720,6 @@ public void ToolbarTemplate_Ok() { builder.AddContent(0, "toolbar-template"); }); - pb.Add(a => a.TableExtensionToolbarBeforeTemplate, builder => - { - builder.AddContent(0, "toolbar-extension-before-template"); - }); pb.Add(a => a.TableExtensionToolbarTemplate, builder => { builder.AddContent(0, "toolbar-extension-template"); @@ -732,7 +728,6 @@ public void ToolbarTemplate_Ok() }); cut.Contains("toolbar-template"); - cut.Contains("toolbar-extension-before-template"); cut.Contains("toolbar-extension-template"); var table = cut.FindComponent>(); @@ -741,7 +736,6 @@ public void ToolbarTemplate_Ok() pb.Add(a => a.ShowToolbar, false); }); cut.DoesNotContain("toolbar-template"); - cut.DoesNotContain("toolbar-extension-before-template"); cut.DoesNotContain("toolbar-extension-template"); }