diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs index 55d4b3161cef7c9f71e7915803453010f686d9f4..ee86f98094e090035e23494b34402d88de09ea03 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs @@ -47,11 +47,6 @@ public partial class Table /// protected CheckboxState RowCheckState(TItem item) => SelectedRows.Contains(item) ? CheckboxState.Checked : CheckboxState.UnChecked; - /// - /// 获得/设置 表头上的复选框 - /// - protected Checkbox? HeaderCheckbox { get; set; } - /// /// 获得/设置 是否为多选模式 默认为 false /// @@ -91,13 +86,12 @@ public partial class Table StateHasChanged(); break; case CheckboxState.UnChecked: + default: // unselect all SelectedRows.Clear(); await OnSelectedRowsChanged(); StateHasChanged(); break; - default: - break; } } diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 2f825cd93f6bcd7eacd955c6a3a13cc74f6f2caa..8b26b469c9d2c1515c998f602c88b32aee70d59c 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -2060,6 +2060,77 @@ public class TableTest : TableTestBase }); } + [Fact] + public async Task HeaderCheckbox_Ok() + { + var localizer = Context.Services.GetRequiredService>(); + var items = Foo.GenerateFoo(localizer, 2); + var cut = Context.RenderComponent(pb => + { + pb.AddChildContent>(pb => + { + pb.Add(a => a.RenderMode, TableRenderMode.Table); + pb.Add(a => a.IsMultipleSelect, true); + pb.Add(a => a.Items, items); + 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.CloseComponent(); + }); + }); + }); + + var btn = cut.Find("thead tr th input"); + await cut.InvokeAsync(() => btn.Click()); + + var checkboxs = cut.FindAll(".is-checked"); + Assert.Equal(3, checkboxs.Count); + + await cut.InvokeAsync(() => btn.Click()); + checkboxs = cut.FindAll(".is-checked"); + Assert.Equal(0, checkboxs.Count); + + var table = cut.FindComponent>(); + table.SetParametersAndRender(pb => pb.Add(a => a.Items, new Foo[] { })); + btn = cut.Find("thead tr th input"); + await cut.InvokeAsync(() => btn.Click()); + } + + [Fact] + public async Task RowCheckbox_Ok() + { + var localizer = Context.Services.GetRequiredService>(); + var items = Foo.GenerateFoo(localizer, 2); + var cut = Context.RenderComponent(pb => + { + pb.AddChildContent>(pb => + { + pb.Add(a => a.RenderMode, TableRenderMode.Table); + pb.Add(a => a.IsMultipleSelect, true); + pb.Add(a => a.Items, items); + 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.CloseComponent(); + }); + }); + }); + + var btn = cut.Find("tbody tr td input"); + await cut.InvokeAsync(() => btn.Click()); + + var checkboxs = cut.FindAll(".is-checked"); + Assert.Equal(1, checkboxs.Count); + + await cut.InvokeAsync(() => btn.Click()); + checkboxs = cut.FindAll(".is-checked"); + Assert.Equal(0, checkboxs.Count); + } + private static Func>> OnQueryAsync(IStringLocalizer localizer) => new(op => { var items = Foo.GenerateFoo(localizer, 5);