How to get the row index of a row in SfDataGrid when using GridTemplateColumn?
SfDataGrid provides various resolving methods to resolve the row index of grid rows based on certain criteria. The actual RowIndex of a row can be resolved by using the ResolveToRowIndex(recordRowIndex) method in SfDataGrid.
The RowIndex of a row can be obtained from GridTemplateColumn by retrieving the record index of the row using the bound data from its BindingContext and passing the recordRowIndex to the ResolveToRowIndex() method.
MainPage.Xaml
<sfgrid:GridTemplateColumn HeaderText="ShipCity" MappingName="ShipCity">
<sfgrid:GridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Clicked="button_Clicked" WidthRequest="120" Text="{Binding ShipCity}"/>
</DataTemplate>
</sfgrid:GridTemplateColumn.CellTemplate>
</sfgrid:GridTemplateColumn>
MainPage.cs
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void button_Clicked(object sender, EventArgs e)
{
var button = sender as Button;
var record = button.BindingContext as OrderInfo;
var recordRowIndex = viewModel.OrderInfoCollection.IndexOf(record);
var rowIndex = sfGrid.ResolveToRowIndex(recordRowIndex);
}
}
RowIndex of the row can also be accessed by using GridTapped, GridDoubleTapped and GridLongPressed events. When using complex layout inside a Template, ensure to set the InputTransparent property of the views loaded in the DataTemplate of the GridTemplateColumn as True.
Sample Link: How to get row index via button click inside GridTemplateColumn?s