Skip to content
8 changes: 4 additions & 4 deletions src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,7 @@ public async Task AddAsync()
{
// 数据源为 DataTable 新建后重建行与列
await DynamicContext.AddAsync(SelectedRows.OfType<IDynamicObject>());
await ResetDynamicContext();
ResetDynamicContext();

if (!IsKeepSelectedRowAfterAdd)
{
Expand Down Expand Up @@ -1030,7 +1030,7 @@ protected async Task DeleteAsync()
if (DynamicContext != null)
{
await DynamicContext.DeleteAsync(SelectedRows.OfType<IDynamicObject>());
await ResetDynamicContext();
ResetDynamicContext();
SelectedRows.Clear();
await OnSelectedRowsChanged();
}
Expand Down Expand Up @@ -1098,7 +1098,7 @@ async Task<bool> DeleteItemsAsync()
}
}

private async Task ResetDynamicContext()
private void ResetDynamicContext()
{
if (DynamicContext != null)
{
Expand All @@ -1112,7 +1112,7 @@ private async Task ResetDynamicContext()
FirstFixedColumnCache.Clear();
LastFixedColumnCache.Clear();

await InternalResetVisibleColumns(Columns);
InternalResetVisibleColumns(Columns);

var queryOption = BuildQueryPageOptions();
// 设置是否为首次查询
Expand Down
16 changes: 8 additions & 8 deletions src/BootstrapBlazor/Components/Table/Table.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1128,11 +1128,11 @@ private async Task ReloadColumnVisibleFromBrowserAsync()
if (!string.IsNullOrEmpty(ClientTableName))
{
// 读取浏览器配置
var clientColumns = await InvokeAsync<List<ColumnVisibleItem>>("reloadColumnList", ClientTableName);
var clientColumns = await InvokeAsync<List<ColumnVisibleItem?>>("reloadColumnList", ClientTableName);
clientColumns ??= [];
foreach (var column in _visibleColumns)
{
var item = clientColumns.FirstOrDefault(i => i.Name == column.Name);
var item = clientColumns.FirstOrDefault(i => i?.Name == column.Name);
if (item != null)
{
column.Visible = item.Visible;
Expand Down Expand Up @@ -1225,7 +1225,7 @@ private async Task ProcessFirstRender()
await OnColumnCreating(cols);
}

await InternalResetVisibleColumns(cols);
InternalResetVisibleColumns(cols);

await ReloadColumnVisibleFromBrowserAsync();

Expand Down Expand Up @@ -1278,7 +1278,7 @@ private void ResetColumnWidth(List<ITableColumn> columns)
}
}

private async Task InternalResetVisibleColumns(List<ITableColumn> columns, IEnumerable<ColumnVisibleItem>? items = null)
private void InternalResetVisibleColumns(List<ITableColumn> columns, IEnumerable<ColumnVisibleItem>? items = null)
{
var cols = columns.Select(i => new ColumnVisibleItem(i.GetFieldName(), i.GetVisible()) { DisplayName = i.GetDisplayName() }).ToList();
if (items != null)
Expand All @@ -1304,15 +1304,15 @@ private async Task InternalResetVisibleColumns(List<ITableColumn> columns, IEnum
/// 设置 列可见方法
/// </summary>
/// <param name="columns"></param>
public async Task ResetVisibleColumns(IEnumerable<ColumnVisibleItem> columns)
public void ResetVisibleColumns(IEnumerable<ColumnVisibleItem> columns)
{
// https://github.com/dotnetcore/BootstrapBlazor/issues/6823
if (AllowResizing)
{
_resetColumns = true;
}

await InternalResetVisibleColumns(Columns, columns);
InternalResetVisibleColumns(Columns, columns);
StateHasChanged();
}

Expand Down Expand Up @@ -1507,7 +1507,7 @@ void SetDynamicEditTemplate()
if (DynamicContext.OnValueChanged != null)
{
var parameters = col.ComponentParameters?.ToList() ?? [];
parameters.Add(new(nameof(ValidateBase<string>.OnValueChanged), onValueChanged.Invoke(d, col, (model, column, val) => DynamicContext.OnValueChanged(model, column, val))));
parameters.Add(new(nameof(ValidateBase<>.OnValueChanged), onValueChanged.Invoke(d, col, (model, column, val) => DynamicContext.OnValueChanged(model, column, val))));
col.ComponentParameters = parameters;
}
builder.CreateComponentByFieldType(this, col, row, changedType, false, col.GetLookupService(InjectLookupService), skipValidate: true);
Expand All @@ -1518,7 +1518,7 @@ void SetEditTemplate()
{
var onValueChanged = Utility.GetOnValueChangedInvoke<TItem>(col.PropertyType);
var parameters = col.ComponentParameters?.ToList() ?? [];
parameters.Add(new(nameof(ValidateBase<string>.OnValueChanged), onValueChanged(item, col, (model, column, val) => InternalOnSaveAsync(model, ItemChangedType.Update))));
parameters.Add(new(nameof(ValidateBase<>.OnValueChanged), onValueChanged(item, col, (model, column, val) => InternalOnSaveAsync(model, ItemChangedType.Update))));
col.ComponentParameters = parameters;
}
}
Expand Down
5 changes: 4 additions & 1 deletion src/BootstrapBlazor/Converter/ColumnVisibleItemConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@

namespace BootstrapBlazor.Components;

/// <summary>
/// ColumnVisibleItem 序列化转化器
/// </summary>
public class ColumnVisibleItemConverter : JsonConverter<ColumnVisibleItem>
{
/// <summary>
Expand Down Expand Up @@ -45,7 +48,7 @@ public class ColumnVisibleItemConverter : JsonConverter<ColumnVisibleItem>
}
}
}
return new ColumnVisibleItem(name, visible);
return string.IsNullOrEmpty(name) ? null : new ColumnVisibleItem(name, visible);
}

/// <summary>
Expand Down
3 changes: 2 additions & 1 deletion test/UnitTest/Components/TableTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -732,8 +732,9 @@ public void ResetFilter_Null()
public async Task ShowColumnList_Ok()
{
// 设置客户端存储
Context.JSInterop.Setup<List<ColumnVisibleItem>>("reloadColumnList", "test").SetResult(
Context.JSInterop.Setup<List<ColumnVisibleItem?>>("reloadColumnList", "test").SetResult(
[
null,
new("Name", false),
new("Address", true)
]);
Expand Down
21 changes: 21 additions & 0 deletions test/UnitTest/Converters/ColumnVisibleItemConverterTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// 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([email protected]) Website: https://www.blazor.zone

using System.Text.Json;

namespace UnitTest.Converters;

public class ColumnVisibleItemConverterTest
{
[Fact]
public void ColumnVisibleItemConverter_Ok()
{
var item = new ColumnVisibleItem("name", true) { DisplayName = "display" };
var json = JsonSerializer.Serialize(item);
Assert.Equal("{\"name\":\"name\",\"visible\":true}", json);

var item2 = JsonSerializer.Deserialize<List<ColumnVisibleItem>>("[{\"test\":\"test\"}]");
}
}
Loading