Closed kamazheng closed 2 weeks ago
You can already do that, just not directly in the parameter (example comes from the demosite):
@inject DataSource Data
<FluentDataGrid Items="@Data.People" style="width: 600px;">
<TemplateColumn Title="Person" SortBy="@sortByName">
<div class="flex items-center">
<img class="flag" src="_content/FluentUI.Demo.Shared/flags/@(context.CountryCode.ToLower()).svg" alt="Flag of @(context.CountryCode)" />
<nobr>
<strong>@context.LastName</strong>, @context.FirstName
</nobr>
</div>
</TemplateColumn>
<TemplateColumn Title="Bonus">
<FluentButton Appearance="Appearance.Accent" @onclick="@(() => Bonus(context))">Regular</FluentButton>
<FluentButton Appearance="Appearance.Accent" @onclick="@(() => DoubleBonus(context))">Double</FluentButton>
</TemplateColumn>
</FluentDataGrid>
<p><strong>@message</strong></p>
@code {
string message = string.Empty;
GridSort<Person> sortByName = GridSort<Person>
.ByAscending(p => p.LastName)
.ThenAscending(p => p.FirstName);
void Bonus(Person p) => message = $"You want to give {p.FirstName} {p.LastName} a regular bonus";
void DoubleBonus(Person p) => message = $"You want to give {p.FirstName} {p.LastName} a double bonus";
}
What are you missing?
My situation is the TemplateColumn created by foreach loop, it's dynamically created. Each TemplateColumn has different parameter for sorting. For example, we have dynamic object, the properties is not known until runtime, I need to pass each property to specific TemplateColumn for sorting, same as to have DataGrid context of List of key-value Dictionary.
I think you can do that with a method that returns a GridSort
I think you can do that with a method that returns a GridSort result. You kan use the @key as a parameter for that method.
The TemplateColumn has no onClick event before sort, cannot pass the current @key to the method which return GridSort.
The @key
comes from the foreach
loop in your example. Passing that to a method does exactly the same as using the inline variant that you are suggesting
The
@key
comes from theforeach
loop in your example. Passing that to a method does exactly the same as using the inline variant that you are suggesting
Thanks. It works. I have another question, when I add sortBy, the header row will add button, how to change the background-color of the button? The XPath: //*[@id="fdb48c27"]/fluent-data-grid/fluent-data-grid-row[1]/fluent-data-grid-cell[2]/fluent-button//button
The button is a shadow element, cannot easy to add css style for it.
This is possible but goes directly against the purpose of this library: supplying components leveraging the Fluent UI design system.
You can target the component with CSS by using the ::deep
selector and then specifying which part of the shadow DOM you want to target by using the standard ::part
selector. Something like:
::deep > fluent-button::part(control){
...your css...
}
Closing this as the original issue is not an issue and provided guidance works.
Is it possible to update DataGrid TemplateColumn SortBy to accept some parameters? For some dynamic situations,