diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicObject.razor b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicObject.razor index ecf78917444..0590ce1a784 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicObject.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicObject.razor @@ -1,4 +1,4 @@ -@page "/table/dynamic-object" +@page "/table/dynamic-object" @inject IStringLocalizer NavMenuLocalizer @inject IStringLocalizer Localizer @@ -12,13 +12,9 @@ IsStriped="true" IsBordered="true" ShowToolbar="true" ShowColumnList="true" ShowDefaultButtons="false" ShowRefresh="false"> - @foreach (var element in DynamicColumnList) + @foreach (var element in _dynamicColumnList) { - - - + } @@ -27,17 +23,13 @@ - @foreach (var element in StaticColumnList) { - - - + }
diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicObject.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicObject.razor.cs index c0b223eb962..315234a3452 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicObject.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicObject.razor.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the Apache 2.0 License // See the LICENSE file in the project root for more information. // Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone @@ -10,8 +10,8 @@ namespace BootstrapBlazor.Server.Components.Samples.Table; /// public partial class TablesDynamicObject { - [NotNull] - private IEnumerable? CustomDynamicItems { get; set; } + private IEnumerable _customDynamicItems = []; + private static List StaticColumnList => [ "A", @@ -20,28 +20,71 @@ public partial class TablesDynamicObject "Z" ]; - [NotNull] - private List? DynamicColumnList { get; set; } + private List _dynamicColumnList = []; /// - /// OnInitialized + /// /// protected override void OnInitialized() { base.OnInitialized(); + // 构造动态列 var now = DateTime.Now; - DynamicColumnList = Enumerable.Range(1, 5).Select(index => now.AddMinutes(-1 * index).ToString("HH:mm")).ToList(); - CustomDynamicItems = Enumerable.Range(1, 10).Select(index => new CustomDynamicColumnsObjectData(index.ToString(), StaticColumnList.ToDictionary(d => d, d => (object?)$"{d}{index}"))); + _dynamicColumnList = Enumerable.Range(1, 5).Select(index => now.AddMinutes(-1 * index).ToString("HH:mm")).ToList(); + _customDynamicItems = GenerateDynamicColumnsObjectData(); + } + + private static IEnumerable GenerateDynamicColumnsObjectData() => Enumerable.Range(1, 10) + .Select(index => new CustomDynamicColumnsObjectData(index.ToString(), GenerateRowData(index))); + + private static Dictionary GenerateRowData(int index) + { + var ret = new Dictionary(); + for (int i = 0; i < StaticColumnList.Count; i++) + { + var columnName = StaticColumnList[i]; + object? value = null; + if (columnName == "A") + { + value = $"Template - A{index}"; + } + else if (columnName == "B") + { + value = index * 100; + } + else if (columnName == "C") + { + value = DateTime.Now.AddDays(index); + } + else if (columnName == "Z") + { + value = i % 2 == 0; + } + ret.Add(columnName, value); + } + return ret; } private readonly static Random random = new(); private Task> OnQueryAsync(QueryPageOptions options) { - var items = Enumerable.Range(1, 10).Select(index => new CustomDynamicData(index.ToString(), DynamicColumnList.ToDictionary(d => d.ToString(), d => $"{random.Next(1000, 9999)}"))); + var items = Enumerable.Range(1, 10).Select(index => new CustomDynamicData(index.ToString(), GenerateDynamicRowData(index))); // sort logic ... // filter logic ... return Task.FromResult(new QueryData() { Items = items, TotalCount = 10, IsSorted = true, IsFiltered = true }); } + + private Dictionary GenerateDynamicRowData(int index) + { + var ret = new Dictionary(); + for (int i = 0; i < _dynamicColumnList.Count; i++) + { + var columnName = _dynamicColumnList[i]; + object? value = random.Next(1000, 9999); + ret.Add(columnName, value); + } + return ret; + } } diff --git a/src/BootstrapBlazor.Server/Data/CustomDynamicData.cs b/src/BootstrapBlazor.Server/Data/CustomDynamicData.cs index 86987bde0f3..0f0bdaed66b 100644 --- a/src/BootstrapBlazor.Server/Data/CustomDynamicData.cs +++ b/src/BootstrapBlazor.Server/Data/CustomDynamicData.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the Apache 2.0 License // See the LICENSE file in the project root for more information. // Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone @@ -20,14 +20,14 @@ public class CustomDynamicData : System.Dynamic.DynamicObject /// /// 存储每列值信息 Key 列名 Value 为列值 /// - public Dictionary Columns { get; set; } + public Dictionary Columns { get; set; } /// /// /// /// /// - public CustomDynamicData(string fix, Dictionary data) + public CustomDynamicData(string fix, Dictionary data) { Fix = fix; Columns = data; @@ -50,9 +50,9 @@ public override bool TryGetMember(GetMemberBinder binder, out object? result) { result = Fix; } - else if (Columns.ContainsKey(binder.Name)) + else if (Columns.TryGetValue(binder.Name, out object? value)) { - result = Columns[binder.Name]; + result = value; } else {