diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs index e8a5e8b216d..6e8ff39beca 100644 --- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs +++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs @@ -315,4 +315,9 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu /// /// public bool IsMarkupString { get; set; } + + /// + /// + /// + public bool? IgnoreWhenExport { get; set; } } diff --git a/src/BootstrapBlazor/Components/Table/ITableColumn.cs b/src/BootstrapBlazor/Components/Table/ITableColumn.cs index a91528f52fd..ac004056c6b 100644 --- a/src/BootstrapBlazor/Components/Table/ITableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/ITableColumn.cs @@ -10,6 +10,11 @@ namespace BootstrapBlazor.Components; /// public interface ITableColumn : IEditorItem { + /// + /// Gets or sets whether the current item is ignored when export operation. Default is false. + /// + bool? IgnoreWhenExport { get; set; } + /// /// Gets or sets whether sorting is allowed. Default is null. /// diff --git a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs index 12586f2e719..59a7d6de30c 100644 --- a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs @@ -322,4 +322,9 @@ class InternalTableColumn(string fieldName, Type fieldType, string? fieldText = /// /// public Func? CustomSearch { get; set; } + + /// + /// + /// + public bool? IgnoreWhenExport { get; set; } } diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs index 968f51cbd38..dca4728d55b 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs @@ -470,7 +470,7 @@ public IEnumerable GetVisibleColumns() { // 不可见列 var items = VisibleColumns.Where(i => i.Visible); - return Columns.Where(i => !i.GetIgnore() && items.Any(v => v.Name == i.GetFieldName()) && ScreenSize >= i.ShownWithBreakPoint); + return Columns.Where(i => !i.GetIgnoreExport() && !i.GetIgnore() && items.Any(v => v.Name == i.GetFieldName()) && ScreenSize >= i.ShownWithBreakPoint); } private bool GetColumnsListState(ColumnVisibleItem item) => VisibleColumns.Find(i => i.Name == item.Name) is { Visible: true } && VisibleColumns.Where(i => i.Visible).DistinctBy(i => i.Name).Count(i => i.Visible) == 1; diff --git a/src/BootstrapBlazor/Components/Table/TableColumn.cs b/src/BootstrapBlazor/Components/Table/TableColumn.cs index 91f9695ed10..af50f4ecf0a 100644 --- a/src/BootstrapBlazor/Components/Table/TableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/TableColumn.cs @@ -51,6 +51,12 @@ public class TableColumn : BootstrapComponentBase, ITableColumn [Parameter] public Expression>? FieldExpression { get; set; } + /// + /// + /// + [Parameter] + public bool? IgnoreWhenExport { get; set; } + /// /// /// diff --git a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs index e10c6aaa341..86631ffefb2 100644 --- a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs @@ -111,6 +111,7 @@ private static void CopyValue(this ITableColumn col, ITableColumn dest) if (col.ToolboxTemplate != null) dest.ToolboxTemplate = col.ToolboxTemplate; if (col.IsRequiredWhenAdd.HasValue) dest.IsRequiredWhenAdd = col.IsRequiredWhenAdd; if (col.IsRequiredWhenEdit.HasValue) dest.IsRequiredWhenEdit = col.IsRequiredWhenEdit; + if (col.IgnoreWhenExport.HasValue) dest.IgnoreWhenExport = col.IgnoreWhenExport; } /// @@ -343,6 +344,8 @@ private static RenderFragment RenderContent(this ITableColumn col, string? text) internal static bool GetVisible(this ITableColumn col) => col.Visible ?? true; + internal static bool GetIgnoreExport(this ITableColumn col) => col.IgnoreWhenExport ?? false; + internal static bool GetShowCopyColumn(this ITableColumn col) => col.ShowCopyColumn ?? false; internal static bool GetShowTips(this ITableColumn col) => col.ShowTips ?? false; diff --git a/test/UnitTest/Attributes/AutoGenerateClassTest.cs b/test/UnitTest/Attributes/AutoGenerateClassTest.cs index 575853f3252..fd005c21d55 100644 --- a/test/UnitTest/Attributes/AutoGenerateClassTest.cs +++ b/test/UnitTest/Attributes/AutoGenerateClassTest.cs @@ -71,7 +71,8 @@ public void AutoGenerateColumn_Ok() HeaderTextWrap = true, IsMarkupString = true, - RequiredErrorMessage = "test" + RequiredErrorMessage = "test", + IgnoreWhenExport = true }; Assert.Equal(1, attr.Order); Assert.True(attr.Ignore); @@ -105,6 +106,7 @@ public void AutoGenerateColumn_Ok() Assert.True(attr.HeaderTextEllipsis); Assert.Equal("test header tooltip", attr.HeaderTextTooltip); Assert.True(attr.IsMarkupString); + Assert.True(attr.IgnoreWhenExport); var attrInterface = (ITableColumn)attr; attrInterface.ShowLabelTooltip = true; diff --git a/test/UnitTest/Components/InternalTableColumnTest.cs b/test/UnitTest/Components/InternalTableColumnTest.cs index 87a0af94e69..116bf2c17d0 100644 --- a/test/UnitTest/Components/InternalTableColumnTest.cs +++ b/test/UnitTest/Components/InternalTableColumnTest.cs @@ -86,6 +86,7 @@ public void InternalTableColumn_Ok() SetValue("IsRequiredWhenAdd", true); SetValue("IsRequiredWhenEdit", true); SetValue("LookupService", null); + SetValue("IgnoreWhenExport", true); void SetValue(string propertyName, object? val) => type!.GetProperty(propertyName)!.SetValue(instance, val); } diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 15020509840..17e862a42bd 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -8208,6 +8208,37 @@ public void IsMarkupString_Ok() Assert.Equal("
<div>Address - Test</div>
", cells[1].InnerHtml); } + [Fact] + public void IgnoreWhenExport_Ok() + { + var items = new Foo[] { new() { Name = "Name", Address = "Address" } }; + var cut = Context.RenderComponent(pb => + { + pb.AddChildContent>(pb => + { + pb.Add(a => a.RenderMode, TableRenderMode.Table); + 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(); + + builder.OpenComponent>(0); + builder.AddAttribute(1, "Field", "Address"); + builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Address", typeof(string))); + builder.AddAttribute(3, "IgnoreWhenExport", true); + builder.CloseComponent(); + }); + }); + }); + + var table = cut.FindComponent>(); + var columns = table.Instance.GetVisibleColumns(); + Assert.Single(columns); + } + [Fact] public void OnSelectedRows_Ok() { diff --git a/test/UnitTest/Utils/UtilityTest.cs b/test/UnitTest/Utils/UtilityTest.cs index bb3340527e6..dd9a83a7ef9 100644 --- a/test/UnitTest/Utils/UtilityTest.cs +++ b/test/UnitTest/Utils/UtilityTest.cs @@ -581,12 +581,13 @@ public void GenerateTableColumns_Ok() { var cols = Utility.GetTableColumns(new InternalTableColumn[] { - new(nameof(Cat.Name), typeof(string)) { Text = "test-Name", LookupServiceData = true, IsVisibleWhenAdd = false, IsVisibleWhenEdit = false } + new(nameof(Cat.Name), typeof(string)) { Text = "test-Name", LookupServiceData = true, IsVisibleWhenAdd = false, IsVisibleWhenEdit = false, IgnoreWhenExport = true } }); Assert.Equal(2, cols.Count()); Assert.Equal(true, cols.First().LookupServiceData); Assert.False(cols.First().IsVisibleWhenAdd); Assert.False(cols.First().IsVisibleWhenEdit); + Assert.True(cols.First().IgnoreWhenExport); } [Fact]