diff --git a/src/BootstrapBlazor.Shared/Locales/zh.json b/src/BootstrapBlazor.Shared/Locales/zh.json index 1220b25e2bd7e2d2f603b9f07e426528d08cd277..060ecac81bf246296aed9ad47f08b716c47c83e6 100644 --- a/src/BootstrapBlazor.Shared/Locales/zh.json +++ b/src/BootstrapBlazor.Shared/Locales/zh.json @@ -5361,13 +5361,13 @@ }, "BootstrapBlazor.Shared.Samples.Table.TablesExport": { "H1": "Table 表格", - "H2": "通过设置 ShowExportButton 设置显示导出按钮,组件内置导出Excel功能", + "H2": "通过设置 ShowExportButton 参数显示导出按钮,组件内置导出 Excel 功能", "P1": "导出功能提供了导出回调方法 OnExportAsync 使用时可以通过提供自定义的导出方法进行数据导出,如果未提供数据导出方法,组件会根据注入的导出服务进行数据导出", "P7": "注入服务", "P8": "增加 BootstrapBlazor 组件", "P9": "增加 Table Excel 导出服务", "P11": "表格导出功能", - "P12": "通过设置 ShowExportButton 属性是否显示导出按钮,默认为false", + "P12": "通过设置 ShowExportButton=\"true\" 属性是否显示导出按钮,默认为false", "P13": "自定义导出方法", "P14": "通过设置 OnExportAsync 回调委托方法可自定义导出方法,不设置将使用组件内置导出函数", "P15": "自定义导出下拉框按钮", diff --git a/src/BootstrapBlazor.Shared/Samples/Table/TablesExport.razor b/src/BootstrapBlazor.Shared/Samples/Table/TablesExport.razor index d4d2d1aad5ec37a86de3e26d06bb231dbebab33d..3b3d56a98666b5f04220d85f5c58bbbc53991aa8 100644 --- a/src/BootstrapBlazor.Shared/Samples/Table/TablesExport.razor +++ b/src/BootstrapBlazor.Shared/Samples/Table/TablesExport.razor @@ -34,7 +34,7 @@ - + - - } - @foreach (var col in GetColumns()) + @foreach (var col in GetVisibleColumns()) { @if (CheckShownWithBreakpoint(col)) { @@ -455,7 +453,7 @@ RenderFragment RenderHeader => hasScroll => { @RenderExtendButtonsHeader } - @foreach (var col in GetColumns()) + @foreach (var col in GetVisibleColumns()) { @if (CheckShownWithBreakpoint(col)) { @@ -550,7 +548,7 @@ RenderFragment RenderHeader => hasScroll =>
 
} - @foreach (var col in GetColumns()) + @foreach (var col in GetVisibleColumns()) { if (CheckShownWithBreakpoint(col)) { @@ -616,7 +614,7 @@ RenderFragment RenderRow => item => { @RenderRowExtendButtons(item) } - @foreach (var col in GetColumns()) + @foreach (var col in GetVisibleColumns()) { if (CheckShownWithBreakpoint(col)) { @@ -714,7 +712,7 @@ RenderFragment RenderPlaceHolderRow => {
} - @foreach (var col in GetColumns()) + @foreach (var col in GetVisibleColumns()) { } diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Sort.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Sort.cs index 81d399b19661afeddbdefa1edaabcdb3832b2438..eb19c3b137949f8822c2089be11280be8603fd85 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Sort.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Sort.cs @@ -170,7 +170,7 @@ public partial class Table .AddClass($"left: {GetExtendButtonsColumnLeftMargin()}px;", FixedExtendButtonsColumn && IsExtendButtonsInRowHeader) .Build(); - private bool IsLastMultiColumn() => FixedMultipleColumn && (!FixedExtendButtonsColumn || !IsExtendButtonsInRowHeader) && !GetColumns().Any(i => i.Fixed); + private bool IsLastMultiColumn() => FixedMultipleColumn && (!FixedExtendButtonsColumn || !IsExtendButtonsInRowHeader) && !GetVisibleColumns().Any(i => i.Fixed); private ConcurrentDictionary LastFixedColumnCache { get; } = new(); @@ -185,7 +185,7 @@ public partial class Table return ret; }); - private bool IsLastExtendButtonColumn() => IsExtendButtonsInRowHeader && !GetColumns().Any(i => i.Fixed); + private bool IsLastExtendButtonColumn() => IsExtendButtonsInRowHeader && !GetVisibleColumns().Any(i => i.Fixed); private ConcurrentDictionary FirstFixedColumnCache { get; } = new(); @@ -200,7 +200,7 @@ public partial class Table return ret; }); - private bool IsFirstExtendButtonColumn() => !IsExtendButtonsInRowHeader && !GetColumns().Any(i => i.Fixed); + private bool IsFirstExtendButtonColumn() => !IsExtendButtonsInRowHeader && !GetVisibleColumns().Any(i => i.Fixed); private int GetExtendButtonsColumnLeftMargin() { @@ -239,7 +239,7 @@ public partial class Table private bool IsTail(ITableColumn col) { - var middle = Math.Floor(GetColumns().Count() * 1.0 / 2); + var middle = Math.Floor(GetVisibleColumns().Count() * 1.0 / 2); var index = Columns.IndexOf(col); return middle < index; } diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs index 97238e8cdb6a7089b6ed9a4a3cc580f80b0bc0cf..748f88a507e9813a319cedfcf595164af1ece1d6 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Toolbar.cs @@ -79,7 +79,7 @@ public partial class Table /// 获得/设置 导出按钮下拉菜单模板 默认 null /// [Parameter] - public RenderFragment? ExportButtonDropdownTemplate { get; set; } + public RenderFragment>? ExportButtonDropdownTemplate { get; set; } /// /// 获得/设置 内置导出微软 Excel 按钮文本 默认 null 读取资源文件 @@ -255,15 +255,19 @@ public partial class Table /// /// 获得/设置 各列是否显示状态集合 /// - private List ColumnVisibles { get; } = new(); + private List VisibleColumns { get; } = new(); - private IEnumerable GetColumns() + /// + /// + /// + /// + public IEnumerable GetVisibleColumns() { - var items = ColumnVisibles.Where(i => i.Visible); + var items = VisibleColumns.Where(i => i.Visible); return Columns.Where(i => items.Any(v => v.Name == i.GetFieldName())); } - private bool GetColumnsListState(ITableColumn col) => ColumnVisibles.First(i => i.Name == col.GetFieldName()).Visible && ColumnVisibles.Count(i => i.Visible) == 1; + private bool GetColumnsListState(ITableColumn col) => VisibleColumns.First(i => i.Name == col.GetFieldName()).Visible && VisibleColumns.Count(i => i.Visible) == 1; private bool ShowAddForm { get; set; } @@ -815,7 +819,7 @@ public partial class Table else { // 通过 ITableExcelExport 服务导出数据 - ret = await ExcelExport.ExportAsync(Rows, GetColumns()); + ret = await ExcelExport.ExportAsync(Rows, GetVisibleColumns()); } option = new ToastOption diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.cs b/src/BootstrapBlazor/Components/Table/Table.razor.cs index e4381f0ea76e9809e3cd5b013babf5f9a7574a6b..4822d117359f8a3be6a9a9481450dcdddd1cd74c 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.cs @@ -755,8 +755,8 @@ public partial class Table : ITable where TItem : class, new() private void InternalResetVisibleColumns(IEnumerable columns) { - ColumnVisibles.Clear(); - ColumnVisibles.AddRange(columns); + VisibleColumns.Clear(); + VisibleColumns.AddRange(columns); } /// @@ -1062,7 +1062,7 @@ public partial class Table : ITable where TItem : class, new() private int GetColumnCount() { - var colspan = GetColumns().Count(col => col.Visible); + var colspan = GetVisibleColumns().Count(col => col.Visible); if (IsMultipleSelect) { colspan++; diff --git a/src/BootstrapBlazor/Components/Table/TableColumnContext.cs b/src/BootstrapBlazor/Components/Table/TableColumnContext.cs index ca1edd54cf866d57105f1980d5c354c9eacc8e2b..54561235bb435ba3205771a861feec5388a94b0e 100644 --- a/src/BootstrapBlazor/Components/Table/TableColumnContext.cs +++ b/src/BootstrapBlazor/Components/Table/TableColumnContext.cs @@ -24,10 +24,10 @@ public class TableColumnContext /// 获得/设置 行数据实例 /// [NotNull] - public TItem Row { get; set; } + public TItem Row { get; } /// /// 获得/设置 当前绑定字段数据实例 /// - public TValue Value { get; set; } + public TValue Value { get; } } diff --git a/src/BootstrapBlazor/Components/Table/TableExportContext.cs b/src/BootstrapBlazor/Components/Table/TableExportContext.cs new file mode 100644 index 0000000000000000000000000000000000000000..29e21c1907622f201ef56a8f4d226b2bea3095a2 --- /dev/null +++ b/src/BootstrapBlazor/Components/Table/TableExportContext.cs @@ -0,0 +1,61 @@ +// Copyright (c) Argo Zhang (argo@163.com). All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Website: https://www.blazor.zone or https://argozhang.github.io/ + +namespace BootstrapBlazor.Components; + +/// +/// +/// +internal class TableExportContext : ITableExportContext +{ + /// + /// 获得 Table 实例 + /// + private ITable Table { get; } + + /// + /// + /// + public IEnumerable Columns => Table.Columns; + + /// + /// + /// + public IEnumerable GetVisibleColumns() => Table.GetVisibleColumns(); + + /// + /// + /// + public IEnumerable Rows { get; } + + /// + /// + /// + public Task ExportAsync() => ExportCallbackAsync(); + + /// + /// + /// + /// + public QueryPageOptions BuildQueryPageOptions() => OptionsBuilder(); + + private Func OptionsBuilder { get; } + + private Func ExportCallbackAsync { get; } + + /// + /// 构造函数 + /// + /// ITable 实例 + /// 行数据集合 + /// ITable 实例当前条件生成方法 + /// ITable 实例内置 Export 方法 + public TableExportContext(ITable table, IEnumerable rows, Func optionsBuilder, Func exportAsync) + { + Table = table; + Rows = rows; + ExportCallbackAsync = exportAsync; + OptionsBuilder = optionsBuilder; + } +} diff --git a/src/Extensions/Components/BootstrapBlazor.TableExport/BootstrapBlazor.TableExport.csproj b/src/Extensions/Components/BootstrapBlazor.TableExport/BootstrapBlazor.TableExport.csproj index b3c406f14a20bc9fc33c6f1847a39a2f4aa4e6ac..c5902de012c3c970f0e313740cf0914f9f77928d 100644 --- a/src/Extensions/Components/BootstrapBlazor.TableExport/BootstrapBlazor.TableExport.csproj +++ b/src/Extensions/Components/BootstrapBlazor.TableExport/BootstrapBlazor.TableExport.csproj @@ -1,13 +1,13 @@ - 7.1.1 + 7.2.0 Bootstrap Blazor WebAssembly wasm UI Components Table Export Bootstrap UI components extensions of export - +