Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/BootstrapBlazor/BootstrapBlazor.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">

<PropertyGroup>
<Version>9.6.2-beta04</Version>
<Version>9.6.2-beta05</Version>
</PropertyGroup>

<ItemGroup>
Expand Down
24 changes: 15 additions & 9 deletions src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ public IEnumerable<ITableColumn> GetVisibleColumns()
{
// 不可见列
var items = VisibleColumns.Where(i => i.Visible);
return Columns.Where(i => !i.GetIgnoreExport() && !i.GetIgnore() && items.Any(v => v.Name == i.GetFieldName()) && ScreenSize >= i.ShownWithBreakPoint);
return Columns.Where(i => !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;
Expand Down Expand Up @@ -1183,20 +1183,26 @@ private ToastOption GetToastOption(string title)
}

private Task ExportAsync() => ExecuteExportAsync(() => OnExportAsync != null
? OnExportAsync(new TableExportDataContext<TItem>(TableExportType.Unknown, Rows, GetVisibleColumns(), BuildQueryPageOptions()))
: TableExport.ExportAsync(Rows, GetVisibleColumns()));
? OnExportAsync(new TableExportDataContext<TItem>(TableExportType.Unknown, Rows, GetExportColumns(), BuildQueryPageOptions()))
: TableExport.ExportAsync(Rows, GetExportColumns()));

private Task ExportCsvAsync() => ExecuteExportAsync(() => OnExportAsync != null
? OnExportAsync(new TableExportDataContext<TItem>(TableExportType.Csv, Rows, GetVisibleColumns(), BuildQueryPageOptions()))
: TableExport.ExportCsvAsync(Rows, GetVisibleColumns()));
? OnExportAsync(new TableExportDataContext<TItem>(TableExportType.Csv, Rows, GetExportColumns(), BuildQueryPageOptions()))
: TableExport.ExportCsvAsync(Rows, GetExportColumns()));

private Task ExportPdfAsync() => ExecuteExportAsync(() => OnExportAsync != null
? OnExportAsync(new TableExportDataContext<TItem>(TableExportType.Pdf, Rows, GetVisibleColumns(), BuildQueryPageOptions()))
: TableExport.ExportPdfAsync(Rows, GetVisibleColumns()));
? OnExportAsync(new TableExportDataContext<TItem>(TableExportType.Pdf, Rows, GetExportColumns(), BuildQueryPageOptions()))
: TableExport.ExportPdfAsync(Rows, GetExportColumns()));

private Task ExportExcelAsync() => ExecuteExportAsync(() => OnExportAsync != null
? OnExportAsync(new TableExportDataContext<TItem>(TableExportType.Excel, Rows, GetVisibleColumns(), BuildQueryPageOptions()))
: TableExport.ExportExcelAsync(Rows, GetVisibleColumns()));
? OnExportAsync(new TableExportDataContext<TItem>(TableExportType.Excel, Rows, GetExportColumns(), BuildQueryPageOptions()))
: TableExport.ExportExcelAsync(Rows, GetExportColumns()));

/// <summary>
/// Gets the export column collection.
/// </summary>
/// <returns></returns>
Copy link

Copilot AI May 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The XML doc tag is empty; please provide a meaningful description of the returned List to improve API documentation.

Suggested change
/// <returns></returns>
/// <returns>A list of <see cref="ITableColumn"/> objects representing the columns to be included in the export.
/// Columns marked with <c>IgnoreWhenExport</c> are excluded.</returns>

Copilot uses AI. Check for mistakes.
public List<ITableColumn> GetExportColumns() => [.. GetVisibleColumns().Where(i => i.IgnoreWhenExport is not true)];

/// <summary>
/// 获取当前 Table 选中的所有行数据
Expand Down
2 changes: 0 additions & 2 deletions src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -344,8 +344,6 @@ 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;
Expand Down
53 changes: 21 additions & 32 deletions test/UnitTest/Components/TableTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6993,6 +6993,12 @@ public void ExportAsync_Ok()
builder.AddAttribute(1, "Field", "Name");
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string)));
builder.CloseComponent();

builder.OpenComponent<TableColumn<Foo, string>>(0);
builder.AddAttribute(1, "Field", "Address");
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Address", typeof(string)));
builder.AddAttribute(3, "IgnoreWhenExport", true);
builder.CloseComponent();
});
});
});
Expand All @@ -7007,9 +7013,20 @@ public void ExportAsync_Ok()
}

var table = cut.FindComponent<Table<Foo>>();

// 可见列为 2 列
var columns = table.Instance.GetVisibleColumns();
Assert.Equal(2, columns.Count());

// 由于设置了 IgnoreWhenExport 为 true 所以导出时不包含 Address 列
Comment on lines +7017 to +7021
Copy link

Copilot AI May 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Inline comments should be in English for consistency; consider translating this comment to English.

Suggested change
// 可见列为 2 列
var columns = table.Instance.GetVisibleColumns();
Assert.Equal(2, columns.Count());
// 由于设置了 IgnoreWhenExport true 所以导出时不包含 Address
// The visible columns are 2
var columns = table.Instance.GetVisibleColumns();
Assert.Equal(2, columns.Count());
// Since IgnoreWhenExport is set to true, the Address column is not included during export

Copilot uses AI. Check for mistakes.
ITableExportDataContext<Foo>? exportContext = null;
table.SetParametersAndRender(pb =>
{
pb.Add(a => a.OnExportAsync, _ => Task.FromResult(true));
pb.Add(a => a.OnExportAsync, context =>
{
exportContext ??= context;
return Task.FromResult(true);
});
});

buttons = cut.FindAll(".dropdown-menu-end .dropdown-item");
Expand All @@ -7020,6 +7037,9 @@ public void ExportAsync_Ok()
button.Click();
});
}
Assert.NotNull(exportContext);
Assert.Single(exportContext.Columns);
Assert.Equal("Name", exportContext.Columns.ElementAt(0).GetFieldName());
}

[Fact]
Expand Down Expand Up @@ -8208,37 +8228,6 @@ public void IsMarkupString_Ok()
Assert.Equal("<div class=\"table-cell\">&lt;div&gt;Address - Test&lt;/div&gt;</div>", cells[1].InnerHtml);
}

[Fact]
public void IgnoreWhenExport_Ok()
{
var items = new Foo[] { new() { Name = "Name", Address = "Address" } };
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
{
pb.AddChildContent<Table<Foo>>(pb =>
{
pb.Add(a => a.RenderMode, TableRenderMode.Table);
pb.Add(a => a.Items, items);
pb.Add(a => a.TableColumns, foo => builder =>
{
builder.OpenComponent<TableColumn<Foo, string>>(0);
builder.AddAttribute(1, "Field", "Name");
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string)));
builder.CloseComponent();

builder.OpenComponent<TableColumn<Foo, string>>(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<Table<Foo>>();
var columns = table.Instance.GetVisibleColumns();
Assert.Single(columns);
}

[Fact]
public void OnSelectedRows_Ok()
{
Expand Down