Skip to content

Commit 8349f14

Browse files
committed
refactor: 增加 TableContentColumn
1 parent 605aca1 commit 8349f14

File tree

4 files changed

+156
-86
lines changed

4 files changed

+156
-86
lines changed

src/BootstrapBlazor/Components/Table/Table.razor

Lines changed: 46 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -725,11 +725,6 @@
725725
<div class="@LineCellClassString">@GetLineNo(item)</div>
726726
</td>
727727
}
728-
@{
729-
var index = 0;
730-
var colIndex = 0;
731-
var isInCell = InCellMode && SelectedRows.FirstOrDefault() == item;
732-
}
733728
@if (ShowExtendButtons && IsExtendButtonsInRowHeader)
734729
{
735730
@RenderRowExtendButtons(item)
@@ -741,94 +736,59 @@
741736
}
742737
else
743738
{
744-
@foreach (var col in GetVisibleColumns())
745-
{
746-
if (colIndex > 1)
747-
{
748-
colIndex--;
749-
continue;
750-
}
751-
var cellClass = "";
752-
var colSpan = 0;
753-
string? value = null;
754-
RenderFragment? valueTemplate = null;
755-
if (col.OnCellRender != null)
756-
{
757-
var cell = new TableCellArgs { Row = item, ColumnName = col.GetFieldName() };
758-
col.OnCellRender(cell);
759-
cellClass = cell.Class;
760-
colSpan = cell.Colspan;
761-
valueTemplate = cell.ValueTemplate;
762-
value = cell.Value;
763-
colIndex = colSpan;
764-
}
765-
<td colspan="@GetColSpan(colSpan)" class="@GetFixedCellClassString(col, cellClass)" style="@GetFixedCellStyleString(col)">
766-
@{
767-
var isFirstColOfTree = IsTree && index++ == 0;
768-
var degree = 0;
769-
var isExpend = false;
770-
var hasChildren = false;
771-
if (isFirstColOfTree)
772-
{
773-
var treeItem = TreeNodeCache.Find(TreeRows, item, out degree);
774-
if(treeItem != null)
775-
{
776-
isExpend = treeItem.IsExpand;
777-
hasChildren = treeItem.HasChildren;
778-
}
779-
}
780-
var hesTreeChildren = isFirstColOfTree && hasChildren;
781-
}
782-
<DynamicElement TagName="div" TriggerClick="@hesTreeChildren"
783-
OnClick="@ToggleTreeRow(item)" StopPropagation="hesTreeChildren"
784-
class="@GetCellClassString(col, hesTreeChildren, isInCell)" style="@GetCellStyleString(col)">
785-
@if (isFirstColOfTree)
786-
{
787-
<div class="is-node" style="@GetTreeStyleString(degree)">
788-
@if (hesTreeChildren)
789-
{
790-
<i class="@GetTreeClassString(isExpend)"></i>
791-
}
792-
</div>
793-
}
794-
@if (IsExcel)
795-
{
796-
@RenderExcelCell(col, item, ItemChangedType.Update)
797-
}
798-
else if(isInCell)
799-
{
800-
@RenderCell(col, EditModel, AddInCell ? ItemChangedType.Add : ItemChangedType.Update)
801-
}
802-
else
803-
{
804-
var triggerDoubleClick = OnDoubleClickCellCallback != null;
805-
<DynamicElement TagName="div" TriggerDoubleClick="triggerDoubleClick" GenerateElement="false"
806-
OnDoubleClick="TriggerDoubleClickCell(col, item)" StopPropagation="true"
807-
class="@GetDoubleClickCellClassString(triggerDoubleClick)">
808-
@if (valueTemplate != null)
809-
{
810-
@valueTemplate
811-
}
812-
else if (value != null)
813-
{
814-
@value
815-
}
816-
else
817-
{
818-
@GetValue(col, item)
819-
}
820-
</DynamicElement>
821-
}
822-
</DynamicElement>
823-
</td>
824-
}
739+
@RenderContentColumn(item);
825740
}
826741
@if (ShowExtendButtons && !IsExtendButtonsInRowHeader)
827742
{
828743
@RenderRowExtendButtons(item)
829744
}
830745
</DynamicElement>;
831746

747+
RenderFragment<TableContentColumnContext<TItem>> RenderContentCell => context =>
748+
@<td colspan="@GetColSpan(context.ColSpan)" class="@GetFixedCellClassString(context.Col, context.CellClass)" style="@GetFixedCellStyleString(context.Col)">
749+
<DynamicElement TagName="div" TriggerClick="@context.HesTreeChildren"
750+
OnClick="@ToggleTreeRow(context.Item)" StopPropagation="context.HesTreeChildren"
751+
class="@GetCellClassString(context.Col, context.HesTreeChildren, context.IsInCell)" style="@GetCellStyleString(context.Col)">
752+
@if (context.IsFirstColOfTree)
753+
{
754+
<div class="is-node" style="@GetTreeStyleString(context.Degree)">
755+
@if (context.HesTreeChildren)
756+
{
757+
<i class="@GetTreeClassString(context.IsExpend)"></i>
758+
}
759+
</div>
760+
}
761+
@if (IsExcel)
762+
{
763+
@RenderExcelCell(context.Col, context.Item, ItemChangedType.Update)
764+
}
765+
else if(context.IsInCell)
766+
{
767+
@RenderCell(context.Col, EditModel, AddInCell ? ItemChangedType.Add : ItemChangedType.Update)
768+
}
769+
else
770+
{
771+
var triggerDoubleClick = OnDoubleClickCellCallback != null;
772+
<DynamicElement TagName="div" TriggerDoubleClick="triggerDoubleClick" GenerateElement="false"
773+
OnDoubleClick="TriggerDoubleClickCell(context.Col, context.Item)" StopPropagation="true"
774+
class="@GetDoubleClickCellClassString(triggerDoubleClick)">
775+
@if (context.ValueTemplate != null)
776+
{
777+
@context.ValueTemplate
778+
}
779+
else if (context.Value != null)
780+
{
781+
@context.Value
782+
}
783+
else
784+
{
785+
@GetValue(context.Col, context.Item)
786+
}
787+
</DynamicElement>
788+
}
789+
</DynamicElement>
790+
</td>;
791+
832792
RenderFragment<PlaceholderContext> RenderPlaceholderRow => context =>
833793
@<tr>
834794
@if (IsMultipleSelect)

src/BootstrapBlazor/Components/Table/Table.razor.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,6 +1367,66 @@ protected RenderFragment GetValue(ITableColumn col, TItem item) => builder =>
13671367
};
13681368
#endregion
13691369

1370+
private RenderFragment RenderContentColumn(TItem item) => builder =>
1371+
{
1372+
var index = 0;
1373+
var colIndex = 0;
1374+
var isInCell = InCellMode && SelectedRows.FirstOrDefault() == item;
1375+
1376+
foreach (var col in GetVisibleColumns())
1377+
{
1378+
if (colIndex > 1)
1379+
{
1380+
colIndex--;
1381+
continue;
1382+
}
1383+
var cellClass = "";
1384+
var colSpan = 0;
1385+
string? value = null;
1386+
RenderFragment? valueTemplate = null;
1387+
if (col.OnCellRender != null)
1388+
{
1389+
var cell = new TableCellArgs { Row = item, ColumnName = col.GetFieldName() };
1390+
col.OnCellRender(cell);
1391+
cellClass = cell.Class;
1392+
colSpan = cell.Colspan;
1393+
valueTemplate = cell.ValueTemplate;
1394+
value = cell.Value;
1395+
colIndex = colSpan;
1396+
}
1397+
1398+
var isFirstColOfTree = IsTree && index++ == 0;
1399+
var degree = 0;
1400+
var isExpend = false;
1401+
var hasChildren = false;
1402+
if (isFirstColOfTree)
1403+
{
1404+
var treeItem = TreeNodeCache.Find(TreeRows, item, out degree);
1405+
if (treeItem != null)
1406+
{
1407+
isExpend = treeItem.IsExpand;
1408+
hasChildren = treeItem.HasChildren;
1409+
}
1410+
}
1411+
var hesTreeChildren = isFirstColOfTree && hasChildren;
1412+
1413+
var context = new TableContentColumnContext<TItem>()
1414+
{
1415+
Item = item,
1416+
ColSpan = colSpan,
1417+
Col = col,
1418+
HesTreeChildren = hesTreeChildren,
1419+
IsInCell = isInCell,
1420+
Degree = degree,
1421+
IsExpend = isExpend,
1422+
IsFirstColOfTree = isFirstColOfTree,
1423+
ValueTemplate = valueTemplate,
1424+
Value = value
1425+
};
1426+
builder.AddContent(0, RenderContentCell(context));
1427+
}
1428+
};
1429+
13701430
/// <summary>
13711431
/// 渲染单元格方法
13721432
/// </summary>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the Apache 2.0 License
3+
// See the LICENSE file in the project root for more information.
4+
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
5+
6+
namespace BootstrapBlazor.Components;
7+
8+
class TableContentColumn : IComponent
9+
{
10+
public void Attach(RenderHandle renderHandle)
11+
{
12+
throw new NotImplementedException();
13+
}
14+
15+
public Task SetParametersAsync(ParameterView parameters)
16+
{
17+
throw new NotImplementedException();
18+
}
19+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the Apache 2.0 License
3+
// See the LICENSE file in the project root for more information.
4+
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
5+
6+
namespace BootstrapBlazor.Components;
7+
8+
readonly record struct TableContentColumnContext<TItem>
9+
{
10+
public TItem Item { get; init; }
11+
12+
public int ColSpan { get; init; }
13+
14+
public ITableColumn Col { get; init; }
15+
16+
public string? CellClass { get; init; }
17+
18+
public bool HesTreeChildren { get; init; }
19+
20+
public bool IsInCell { get; init; }
21+
22+
public int Degree { get; init; }
23+
24+
public bool IsExpend { get; init; }
25+
26+
public bool IsFirstColOfTree { get; init; }
27+
28+
public RenderFragment? ValueTemplate { get; init; }
29+
30+
public string? Value { get; init; }
31+
}

0 commit comments

Comments
 (0)