|
[Index.razor]
<SfGrid @ref="Grid" ID="Grid" DataSource="@Employees" Toolbar="Toolbaritems">
<GridEvents DetailDataBound="DetailDataBound" DataBound="DataBound" TValue="EmployeeData"></GridEvents>
<GridTemplates>
<DetailTemplate>
@{
var employee = (context as EmployeeData);
<div>
<SfGrid ID="DetailGrid" DataSource="@Orders">
. . .
</SfGrid>
</div>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
. . .
</GridColumns>
</SfGrid>
@code{
SfGrid<EmployeeData> Grid;
. . .
public bool firstrender { get; set; } = true;
public async Task DataBound()
{
if (firstrender)
{
var dotNetReference = DotNetObjectReference.Create(this);
await Runtime.InvokeAsync<string>("detail", dotNetReference);
firstrender = false;
}
}
public async Task DetailDataBound(DetailDataBoundEventArgs<EmployeeData> args)
{
if (target != null)
{
if (target == args.Data)
{
return;
}
await Grid.DetailExpandCollapseRow(target);
}
target = args.Data;
}
[JSInvokable("DetailCollapse")]
public void DetailRowCollapse()
{
target = null;
}
p. . .
}
|
|
[detailexpand.js]
function detail(dotnet) {
dotnetInstance = dotnet; // dotnet instance to invoke C# method from JS
}
document.addEventListener('click', function (args) {
if (args.target.classList.contains("e-dtdiagonaldown") || args.target.classList.contains("e-detailrowexpand")) {
dotnetInstance.invokeMethodAsync('DetailCollapse'); // call C# method from javascript function
}
}) |