diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs index 2772a7e8234..36c8969c93b 100644 --- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs +++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs @@ -230,6 +230,11 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu /// public bool ShowSearchWhenSelect { get; set; } + /// + /// + /// + public bool IsFixedSearchWhenSelect { get; set; } + /// /// /// diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 0fadf98642f..b795e294dd3 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 9.4.9-beta07 + 9.4.9-beta08 diff --git a/src/BootstrapBlazor/Components/EditorForm/EditorItem.cs b/src/BootstrapBlazor/Components/EditorForm/EditorItem.cs index 8e2859fbfd7..bc850244925 100644 --- a/src/BootstrapBlazor/Components/EditorForm/EditorItem.cs +++ b/src/BootstrapBlazor/Components/EditorForm/EditorItem.cs @@ -9,9 +9,8 @@ namespace BootstrapBlazor.Components; /// -/// EditorItem 组件 +/// EditorItem component /// -/// 用于 EditorForm 的 FieldItems 模板内 public class EditorItem : ComponentBase, IEditorItem { /// @@ -27,7 +26,7 @@ public class EditorItem : ComponentBase, IEditorItem public EventCallback FieldChanged { get; set; } /// - /// 获得/设置 绑定列类型 + /// /// [NotNull] public Type? PropertyType { get; set; } @@ -71,19 +70,19 @@ public class EditorItem : ComponentBase, IEditorItem public string? RequiredErrorMessage { get; set; } /// - /// 获得/设置 是否不进行验证 默认为 false + /// /// [Parameter] public bool SkipValidate { get; set; } /// - /// 获得/设置 是否显示标签 Tooltip 多用于标签文字过长导致裁减时使用 默认 null + /// /// [Parameter] public bool? ShowLabelTooltip { get; set; } /// - /// 获得/设置 表头显示文字 + /// /// [Parameter] public string? Text { get; set; } @@ -95,13 +94,13 @@ public class EditorItem : ComponentBase, IEditorItem public string? Step { get; set; } /// - /// 获得/设置 Textarea行数 + /// /// [Parameter] public int Rows { get; set; } /// - /// 获得/设置 编辑模板 + /// /// [Parameter] public RenderFragment? EditTemplate { get; set; } @@ -121,47 +120,53 @@ public class EditorItem : ComponentBase, IEditorItem } /// - /// 获得/设置 组件类型 默认为 null + /// /// [Parameter] public Type? ComponentType { get; set; } /// - /// 获得/设置 组件自定义类型参数集合 默认为 null + /// /// [Parameter] public IEnumerable>? ComponentParameters { get; set; } /// - /// 获得/设置 placeholder 文本 默认为 null + /// /// [Parameter] public string? PlaceHolder { get; set; } /// - /// 获得/设置 显示顺序 + /// /// [Parameter] public int Order { get; set; } /// - /// 获得/设置 额外数据源一般用于下拉框或者 CheckboxList 这种需要额外配置数据源组件使用 + /// /// [Parameter] public IEnumerable? Items { get; set; } /// - /// 获得/设置 字典数据源 常用于外键自动转换为名称操作 + /// /// [Parameter] public IEnumerable? Lookup { get; set; } /// - /// 获得/设置 字段数据源下拉框是否显示搜索栏 默认 false 不显示 + /// /// [Parameter] public bool ShowSearchWhenSelect { get; set; } + /// + /// + /// + [Parameter] + public bool IsFixedSearchWhenSelect { get; set; } + /// /// /// @@ -193,32 +198,28 @@ public class EditorItem : ComponentBase, IEditorItem public ILookupService? LookupService { get; set; } /// - /// 获得/设置 自定义验证集合 + /// /// [Parameter] public List? ValidateRules { get; set; } - /// - /// 获得/设置 IEditorItem 集合实例 - /// - /// EditorForm 组件级联传参下来的值 [CascadingParameter] private List? EditorItems { get; set; } /// - /// 获得/设置 当前属性分组 + /// /// [Parameter] public string? GroupName { get; set; } /// - /// 获得/设置 当前属性分组排序 默认 0 + /// /// [Parameter] public int GroupOrder { get; set; } /// - /// OnInitialized 方法 + /// /// protected override void OnInitialized() { @@ -235,13 +236,14 @@ protected override void OnInitialized() } private FieldIdentifier? _fieldIdentifier; + /// - /// 获取绑定字段显示名称方法 + /// Gets the display name for the field. /// public virtual string GetDisplayName() => Text ?? _fieldIdentifier?.GetDisplayName() ?? string.Empty; /// - /// 获取绑定字段信息方法 + /// Gets the field name for the field. /// public string GetFieldName() => _fieldIdentifier?.FieldName ?? string.Empty; } diff --git a/src/BootstrapBlazor/Components/EditorForm/IEditorItem.cs b/src/BootstrapBlazor/Components/EditorForm/IEditorItem.cs index 8c6d790b509..2ae1a00c138 100644 --- a/src/BootstrapBlazor/Components/EditorForm/IEditorItem.cs +++ b/src/BootstrapBlazor/Components/EditorForm/IEditorItem.cs @@ -86,6 +86,11 @@ public interface IEditorItem : ILookup /// bool ShowSearchWhenSelect { get; set; } + /// + /// Gets or sets whether to allow fixed search box within dropdown. Default is false. + /// + bool IsFixedSearchWhenSelect { get; set; } + /// /// Gets or sets whether to use Popover to render the dropdown list. Default is false. /// diff --git a/src/BootstrapBlazor/Components/Filters/LookupFilter.razor b/src/BootstrapBlazor/Components/Filters/LookupFilter.razor index ade21e8e2ee..c4baa0705dc 100644 --- a/src/BootstrapBlazor/Components/Filters/LookupFilter.razor +++ b/src/BootstrapBlazor/Components/Filters/LookupFilter.razor @@ -5,10 +5,10 @@ { if (IsHeaderRow) { - + } else { - + } } diff --git a/src/BootstrapBlazor/Components/Filters/LookupFilter.razor.cs b/src/BootstrapBlazor/Components/Filters/LookupFilter.razor.cs index be9fa4540a2..a18f8cd59af 100644 --- a/src/BootstrapBlazor/Components/Filters/LookupFilter.razor.cs +++ b/src/BootstrapBlazor/Components/Filters/LookupFilter.razor.cs @@ -58,6 +58,12 @@ public partial class LookupFilter : ILookup [Parameter] public bool IsShowSearch { get; set; } + /// + /// 获得 是否为 ShowSearch 呈现模式 默认为 false + /// + [Parameter] + public bool IsFixedSearch { get; set; } + [Inject] [NotNull] private IStringLocalizer? Localizer { get; set; } diff --git a/src/BootstrapBlazor/Components/Filters/TableFilter.razor b/src/BootstrapBlazor/Components/Filters/TableFilter.razor index fc355a662c4..53df8ddfa2e 100644 --- a/src/BootstrapBlazor/Components/Filters/TableFilter.razor +++ b/src/BootstrapBlazor/Components/Filters/TableFilter.razor @@ -46,7 +46,7 @@ else } else if (Column.IsLookup()) { - + } else { diff --git a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs index e5e574d86fe..27ec2dee2f3 100644 --- a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs @@ -5,12 +5,6 @@ namespace BootstrapBlazor.Components; -/// -/// 构造函数 -/// -/// 字段名称 -/// 字段类型 -/// 显示文字 class InternalTableColumn(string fieldName, Type fieldType, string? fieldText = null) : ITableColumn { private string FieldName { get; } = fieldName; @@ -94,22 +88,37 @@ class InternalTableColumn(string fieldName, Type fieldType, string? fieldText = public string? RequiredErrorMessage { get; set; } /// - /// 获得/设置 是否显示标签 Tooltip 多用于标签文字过长导致裁减时使用 默认 null + /// /// public bool? ShowLabelTooltip { get; set; } + /// + /// + /// public string? CssClass { get; set; } + /// + /// + /// public BreakPoint ShownWithBreakPoint { get; set; } + /// + /// + /// public RenderFragment? Template { get; set; } + /// + /// + /// public RenderFragment? SearchTemplate { get; set; } + /// + /// + /// public RenderFragment? FilterTemplate { get; set; } /// - /// 获得/设置 表头模板 + /// /// public RenderFragment? HeaderTemplate { get; set; } @@ -118,67 +127,105 @@ class InternalTableColumn(string fieldName, Type fieldType, string? fieldText = /// public RenderFragment? ToolboxTemplate { get; set; } + /// + /// + /// public IFilter? Filter { get; set; } + /// + /// + /// public string? FormatString { get; set; } /// - /// 获得/设置 placeholder 文本 默认为 null + /// /// public string? PlaceHolder { get; set; } + /// + /// + /// public Func>? Formatter { get; set; } + /// + /// + /// public Alignment? Align { get; set; } + /// + /// + /// public bool? ShowTips { get; set; } + /// + /// + /// public Func>? GetTooltipTextCallback { get; set; } + /// + /// + /// public Type PropertyType { get; } = fieldType; + /// + /// + /// [ExcludeFromCodeCoverage] public bool Editable { get; set; } = true; + /// + /// + /// public string? Step { get; set; } + /// + /// + /// public int Rows { get; set; } + /// + /// + /// [NotNull] public string? Text { get; set; } = fieldText; public RenderFragment? EditTemplate { get; set; } /// - /// 获得/设置 组件类型 默认为 null + /// /// public Type? ComponentType { get; set; } /// - /// 获得/设置 组件自定义类型参数集合 默认为 null + /// /// public IEnumerable>? ComponentParameters { get; set; } /// - /// 获得/设置 额外数据源一般用于下拉框或者 CheckboxList 这种需要额外配置数据源组件使用 + /// /// public IEnumerable? Items { get; set; } /// - /// 获得/设置 显示顺序 + /// /// public int Order { get; set; } /// - /// 获得/设置 字典数据源 常用于外键自动转换为名称操作 + /// /// public IEnumerable? Lookup { get; set; } /// - /// 获得/设置 字段数据源下拉框是否显示搜索栏 默认 false 不显示 + /// /// public bool ShowSearchWhenSelect { get; set; } + /// + /// + /// + public bool IsFixedSearchWhenSelect { get; set; } + /// /// /// @@ -205,22 +252,22 @@ class InternalTableColumn(string fieldName, Type fieldType, string? fieldText = public ILookupService? LookupService { get; set; } /// - /// 获得/设置 单元格回调方法 + /// /// public Action? OnCellRender { get; set; } /// - /// 获得/设置 自定义验证集合 + /// /// public List? ValidateRules { get; set; } /// - /// 获得/设置 当前属性分组 + /// /// public string? GroupName { get; set; } /// - /// 获得/设置 当前属性分组排序 默认 0 + /// /// public int GroupOrder { get; set; } @@ -254,12 +301,18 @@ class InternalTableColumn(string fieldName, Type fieldType, string? fieldText = /// public bool IsMarkupString { get; set; } + /// + /// + /// public string GetDisplayName() => Text; + /// + /// + /// public string GetFieldName() => FieldName; /// - /// 自定义实现搜索方法 + /// /// public Func? CustomSearch { get; set; } } diff --git a/src/BootstrapBlazor/Components/Table/TableColumn.cs b/src/BootstrapBlazor/Components/Table/TableColumn.cs index 7a071bd3be5..de8f1c04c10 100644 --- a/src/BootstrapBlazor/Components/Table/TableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/TableColumn.cs @@ -288,13 +288,13 @@ public class TableColumn : BootstrapComponentBase, ITableColumn public Func>? Formatter { get; set; } /// - /// 获得/设置 显示模板 + /// /// [Parameter] public RenderFragment>? Template { get; set; } /// - /// 内部使用负责把 object 类型的绑定数据值转化为泛型数据传递给前端 + /// /// RenderFragment? ITableColumn.Template { @@ -319,7 +319,7 @@ public class TableColumn : BootstrapComponentBase, ITableColumn } /// - /// 获得/设置 编辑模板 + /// /// [Parameter] public RenderFragment? EditTemplate { get; set; } @@ -339,7 +339,7 @@ public class TableColumn : BootstrapComponentBase, ITableColumn } /// - /// 获得/设置 搜索模板 + /// /// /// [Parameter] @@ -360,53 +360,59 @@ public class TableColumn : BootstrapComponentBase, ITableColumn } /// - /// 获得/设置 过滤模板 + /// /// [Parameter] public RenderFragment? FilterTemplate { get; set; } /// - /// 获得/设置 表头模板 + /// /// [Parameter] public RenderFragment? HeaderTemplate { get; set; } /// - /// 获得/设置 列工具栏模板 默认 null + /// /// [Parameter] public RenderFragment? ToolboxTemplate { get; set; } /// - /// 获得/设置 显示节点阈值 默认值 BreakPoint.None 未设置 + /// /// [Parameter] public BreakPoint ShownWithBreakPoint { get; set; } /// - /// 获得/设置 额外数据源一般用于下拉框或者 CheckboxList 这种需要额外配置数据源组件使用 + /// /// [Parameter] public IEnumerable? Items { get; set; } /// - /// 获得/设置 显示顺序 + /// /// [Parameter] public int Order { get; set; } /// - /// 获得/设置 字典数据源 常用于外键自动转换为名称操作 + /// /// [Parameter] public IEnumerable? Lookup { get; set; } /// - /// 获得/设置 字段数据源下拉框是否显示搜索栏 默认 false 不显示 + /// /// [Parameter] public bool ShowSearchWhenSelect { get; set; } + /// + /// + /// + [Parameter] + public bool IsFixedSearchWhenSelect { get; set; } + /// /// /// @@ -438,13 +444,13 @@ public class TableColumn : BootstrapComponentBase, ITableColumn public object? LookupServiceData { get; set; } /// - /// 获得/设置 单元格回调方法 + /// /// [Parameter] public Action? OnCellRender { get; set; } /// - /// 获得/设置 是否为 MarkupString 默认 false + /// /// [Parameter] public bool IsMarkupString { get; set; } @@ -456,31 +462,31 @@ public class TableColumn : BootstrapComponentBase, ITableColumn public List? ValidateRules { get; set; } /// - /// 获得/设置 绑定类字段名称 + /// /// [Parameter] public string? FieldName { get; set; } /// - /// 获得/设置 当前属性分组 默认 null + /// /// [Parameter] public string? GroupName { get; set; } /// - /// 获得/设置 当前属性分组排序 默认 0 + /// /// [Parameter] public int GroupOrder { get; set; } /// - /// 获得/设置 Table 实例 + /// /// [CascadingParameter] protected IColumnCollection? Columns { get; set; } /// - /// 组件初始化方法 + /// /// protected override void OnInitialized() { @@ -498,12 +504,12 @@ protected override void OnInitialized() private FieldIdentifier? _fieldIdentifier; /// - /// 获取绑定字段显示名称方法 + /// /// public virtual string GetDisplayName() => Text ?? _fieldIdentifier?.GetDisplayName() ?? FieldName ?? ""; /// - /// 获取绑定字段信息方法 + /// /// public string GetFieldName() { diff --git a/src/BootstrapBlazor/Components/Table/TableTemplateColumn.cs b/src/BootstrapBlazor/Components/Table/TableTemplateColumn.cs index 21ab1a399f1..2c4ad8e95c1 100644 --- a/src/BootstrapBlazor/Components/Table/TableTemplateColumn.cs +++ b/src/BootstrapBlazor/Components/Table/TableTemplateColumn.cs @@ -6,10 +6,10 @@ namespace BootstrapBlazor.Components; /// -/// TableTemplateColumn 表格模板列 +/// TableTemplateColumn component /// -/// 不需要绑定模型属性 +/// No need to bind model properties public class TableTemplateColumn : TableColumn { - + } diff --git a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs index 1e0793e9caa..13d0182b849 100644 --- a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs @@ -46,6 +46,7 @@ public static void CopyValue(this ITableColumn dest, IEditorItem source) if (source.Items != null) dest.Items = source.Items; if (source.Lookup != null) dest.Lookup = source.Lookup; if (source.ShowSearchWhenSelect) dest.ShowSearchWhenSelect = source.ShowSearchWhenSelect; + if (source.IsFixedSearchWhenSelect) dest.IsFixedSearchWhenSelect = source.IsFixedSearchWhenSelect; if (source.IsPopover) dest.IsPopover = source.IsPopover; if (source.LookupStringComparison != StringComparison.OrdinalIgnoreCase) dest.LookupStringComparison = source.LookupStringComparison; if (source.LookupServiceKey != null) dest.LookupServiceKey = source.LookupServiceKey; diff --git a/src/BootstrapBlazor/Utils/Utility.cs b/src/BootstrapBlazor/Utils/Utility.cs index 74f5ff6285c..a01498f7a5d 100644 --- a/src/BootstrapBlazor/Utils/Utility.cs +++ b/src/BootstrapBlazor/Utils/Utility.cs @@ -532,6 +532,7 @@ public static void CreateComponentByFieldType(this RenderTreeBuilder builder, Co if (item.IsLookup() && item.Items == null) { builder.AddAttribute(110, nameof(Select.ShowSearch), item.ShowSearchWhenSelect); + builder.AddAttribute(111, nameof(Select.IsFixedSearch), item.IsFixedSearchWhenSelect); builder.AddAttribute(115, nameof(Select.Items), item.Lookup); builder.AddAttribute(120, nameof(Select.LookupService), lookupService); builder.AddAttribute(121, nameof(Select.LookupServiceKey), item.LookupServiceKey); @@ -544,6 +545,7 @@ public static void CreateComponentByFieldType(this RenderTreeBuilder builder, Co { builder.AddAttribute(140, nameof(Select.Items), item.Items.Clone()); builder.AddAttribute(150, nameof(Select.ShowSearch), item.ShowSearchWhenSelect); + builder.AddAttribute(151, nameof(Select.IsFixedSearch), item.IsFixedSearchWhenSelect); } // 设置 SkipValidate 参数 diff --git a/test/UnitTest/Attributes/AutoGenerateClassTest.cs b/test/UnitTest/Attributes/AutoGenerateClassTest.cs index a9ac8571a79..081be6394fb 100644 --- a/test/UnitTest/Attributes/AutoGenerateClassTest.cs +++ b/test/UnitTest/Attributes/AutoGenerateClassTest.cs @@ -222,6 +222,9 @@ public void AutoGenerateColumn_Ok() attrEditor.ShowSearchWhenSelect = true; Assert.True(attrEditor.ShowSearchWhenSelect); + attrEditor.IsFixedSearchWhenSelect = true; + Assert.True(attrEditor.IsFixedSearchWhenSelect); + attrEditor.IsPopover = true; Assert.True(attrEditor.IsPopover); diff --git a/test/UnitTest/Components/EditorFormTest.cs b/test/UnitTest/Components/EditorFormTest.cs index 36203771e51..3c85ae28cee 100644 --- a/test/UnitTest/Components/EditorFormTest.cs +++ b/test/UnitTest/Components/EditorFormTest.cs @@ -269,6 +269,7 @@ public void EditorItem_Ok() new("False", "Test-False") }); builder.AddAttribute(index++, nameof(EditorItem.ShowSearchWhenSelect), false); + builder.AddAttribute(index++, nameof(EditorItem.IsFixedSearchWhenSelect), false); builder.AddAttribute(index++, nameof(EditorItem.IsPopover), false); builder.CloseComponent(); }); diff --git a/test/UnitTest/Components/InternalTableColumnTest.cs b/test/UnitTest/Components/InternalTableColumnTest.cs index 1613b821d50..144ec6418da 100644 --- a/test/UnitTest/Components/InternalTableColumnTest.cs +++ b/test/UnitTest/Components/InternalTableColumnTest.cs @@ -64,6 +64,7 @@ public void InternalTableColumn_Ok() SetValue("Order", 1); SetValue("Lookup", new SelectedItem[] { new("test", "Test") }); SetValue("ShowSearchWhenSelect", true); + SetValue("IsFixedSearchWhenSelect", true); SetValue("IsPopover", true); SetValue("LookupStringComparison", StringComparison.Ordinal); SetValue("LookupServiceKey", "Test"); diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 54527fb6684..7f8259d6a7a 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -5010,6 +5010,7 @@ public void TableColumn_Property() builder.AddAttribute(31, "IsVisibleWhenAdd", false); builder.AddAttribute(32, "IsVisibleWhenEdit", false); builder.AddAttribute(33, "LookupService", new FooLookupService()); + builder.AddAttribute(34, "IsFixedSearchWhenSelect", true); builder.CloseComponent(); }); }); @@ -5044,6 +5045,7 @@ public void TableColumn_Property() Assert.Equal("test", column.Instance.GroupName); Assert.Equal(1, column.Instance.GroupOrder); Assert.True(column.Instance.ShowSearchWhenSelect); + Assert.True(column.Instance.IsFixedSearchWhenSelect); Assert.False(column.Instance.IsPopover); Assert.NotNull(column.Instance.LookupService); diff --git a/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs b/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs index 91de55e0d53..baedf6b4a4c 100644 --- a/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs +++ b/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs @@ -101,6 +101,7 @@ public void CopyValue_Ok() HeaderTextWrap = true, HeaderTextTooltip = "test tooltip", ShowSearchWhenSelect = true, + IsFixedSearchWhenSelect = true, IsPopover = true, ShowCopyColumn = true, Step = "0.01", @@ -165,6 +166,7 @@ public void CopyValue_Ok() Assert.True(col.HeaderTextWrap); Assert.Equal("test tooltip", col.HeaderTextTooltip); Assert.True(col.ShowSearchWhenSelect); + Assert.True(col.IsFixedSearchWhenSelect); Assert.True(col.IsPopover); Assert.True(col.ShowCopyColumn); Assert.Equal("0.01", col.Step);