Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Select or Unselect items using HandleOnCellClickAsync
  • Loading branch information
dvoituron committed Jun 24, 2024
commit a7942618ba1b47b34c080030490869a6e52e8363
Original file line number Diff line number Diff line change
Expand Up @@ -1452,6 +1452,7 @@
<member name="P:Microsoft.FluentUI.AspNetCore.Components.SelectColumn`1.SelectFromEntireRow">
<summary>
Gets or sets whether the selection of rows is restricted to the SelectColumn (false) or if the whole row can be clicked to toggled the selection (true).
Default is True.
</summary>
</member>
<member name="P:Microsoft.FluentUI.AspNetCore.Components.SelectColumn`1.SelectAllTemplate">
Expand Down Expand Up @@ -1865,6 +1866,11 @@
Gets or sets the owning <see cref="T:Microsoft.FluentUI.AspNetCore.Components.FluentDataGrid`1"/> component
</summary>
</member>
<member name="P:Microsoft.FluentUI.AspNetCore.Components.FluentDataGridCell`1.Column">
<summary>
Gets a reference to the column that this cell belongs to.
</summary>
</member>
<member name="M:Microsoft.FluentUI.AspNetCore.Components.FluentDataGridCell`1.HandleOnCellClickAsync">
<summary />
</member>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,20 @@
<FluentCheckbox @bind-Value="@UseSelectedItems"
@bind-Value:after="@(() => ResetSelectItems())"
Label="Use `SelectedItems` property" />
<FluentCheckbox @bind-Value="@SelectFromEntireRow"
@bind-Value:after="@(() => ResetSelectItems())"
Label="Use `SelectFromEntireRow` property" />
</FluentStack>

@if (UseSelectedItems)
{
@* Sample using SelectedItems *@
<div>Using SelectedItems</div>

<FluentDataGrid Items="@People" ShowHover="true" TGridItem="Person" OnRowClick="@(e => Console.WriteLine(e.RowIndex))" OnCellClick="@(e => Console.WriteLine(e.GridColumn))">
<FluentDataGrid Items="@People" ShowHover="@SelectFromEntireRow" TGridItem="Person">
<SelectColumn TGridItem="Person"
SelectMode="@Mode"
SelectFromEntireRow="@SelectFromEntireRow"
@bind-SelectedItems="@SelectedItems" />
<PropertyColumn Width="100px" Property="@(p => p.PersonId)" Title="ID" />
<PropertyColumn Width="300px" Property="@(p => p.Name)" />
Expand All @@ -30,9 +34,10 @@ else
@* Sample using Property and OnSelect *@
<div>Using Property and OnSelect</div>

<FluentDataGrid Items="@People" ShowHover="true" TGridItem="Person">
<FluentDataGrid Items="@People" ShowHover="@SelectFromEntireRow" TGridItem="Person">
<SelectColumn TGridItem="Person"
SelectMode="@Mode"
SelectFromEntireRow="@SelectFromEntireRow"
Property="@(e => e.Selected)"
OnSelect="@(e => e.Item.Selected = e.Selected)"
SelectAll="@(People.All(p => p.Selected))"
Expand All @@ -50,6 +55,7 @@ else

@code {
bool UseSelectedItems = true;
bool SelectFromEntireRow = true;
DataGridSelectMode Mode = DataGridSelectMode.Single;

IEnumerable<Person> SelectedItems = People.Where(p => p.Selected);
Expand Down
1 change: 1 addition & 0 deletions src/Core/Components/DataGrid/Columns/SelectColumn.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public SelectColumn()

/// <summary>
/// Gets or sets whether the selection of rows is restricted to the SelectColumn (false) or if the whole row can be clicked to toggled the selection (true).
/// Default is True.
/// </summary>
[Parameter]
public bool SelectFromEntireRow { get; set; } = true;
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Components/DataGrid/FluentDataGrid.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ public partial class FluentDataGrid<TGridItem> : FluentComponentBase, IHandleEve
// We cascade the InternalGridContext to descendants, which in turn call it to add themselves to _columns
// This happens on every render so that the column list can be updated dynamically
private readonly InternalGridContext<TGridItem> _internalGridContext;
private readonly List<ColumnBase<TGridItem>> _columns;
internal readonly List<ColumnBase<TGridItem>> _columns;
private bool _collectingColumns; // Columns might re-render themselves arbitrarily. We only want to capture them at a defined time.

// Tracking state for options and sorting
Expand Down
21 changes: 11 additions & 10 deletions src/Core/Components/DataGrid/FluentDataGridCell.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ public partial class FluentDataGridCell<TGridItem> : FluentComponentBase
[CascadingParameter]
private InternalGridContext<TGridItem> GridContext { get; set; } = default!;

/// <summary>
/// Gets a reference to the column that this cell belongs to.
/// </summary>
private ColumnBase<TGridItem>? Column => Owner.Owner.Grid._columns.ElementAtOrDefault(GridColumn - 1);

protected string? StyleValue => new StyleBuilder(Style)
.AddStyle("height", $"{GridContext.Grid.ItemSize:0}px", () => !GridContext.Grid.Loading && GridContext.Grid.Virtualize && Owner.RowType == DataGridRowType.Default)
.AddStyle("align-content", "center", () => !GridContext.Grid.Loading && GridContext.Grid.Virtualize && Owner.RowType == DataGridRowType.Default && string.IsNullOrEmpty(Style))
Expand All @@ -67,16 +72,12 @@ private async Task HandleOnCellClickAsync()
await GridContext.Grid.OnCellClick.InvokeAsync(this);
}

//if (CellType == DataGridCellType.Default && Owner.Owner.Grid.SelectColumns.Any(selColumn => selColumn.RestrictToCheckbox))
//{
// foreach (var selColumn in Owner.Owner.Grid.SelectColumns)
// {
// if (selColumn != null && selColumn.RestrictToCheckbox is true && Owner.Owner.Grid.Columns.IndexOf(selColumn) == GridColumn - 1)
// {
// await selColumn.AddOrRemoveSelectedItemAsync(Item);
// }
// }
//}
// If the cell is a checkbox cell, add or remove the item from the selected items list.
var selectColumn = Column as SelectColumn<TGridItem>;
if (CellType == DataGridCellType.Default && selectColumn != null && selectColumn.SelectFromEntireRow == false)
{
await selectColumn.AddOrRemoveSelectedItemAsync(Item);
}
}

public void Dispose() => Owner.Unregister(this);
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Components/DataGrid/FluentDataGridRow.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ internal async Task HandleOnRowClickAsync(string rowId)

if (row != null && row.RowType == DataGridRowType.Default)
{
foreach (var selColumn in Owner.Grid.SelectColumns)
foreach (var selColumn in Owner.Grid.SelectColumns.Where(i => i.SelectFromEntireRow))
{
await selColumn.AddOrRemoveSelectedItemAsync(Item);
}
Expand Down