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