xamarin-forms-docs/knowledge-base/datagrid-row-selection-info...

3.2 KiB

title description type page_title slug position tags ticketid res_type
Access DataGrid Row info on selection changed Access DataGrid Row info on selection changed when DataGrid Selection Unit is Row how-to Access DataGrid Row info on selection changed datagrid-row-selection-info-on-selection-changed datagrid, xamarin, row, info, selection, selectionchanged 1506891 kb

Environment

Product Version 2020.3.1106.1
Product DataGrid for Xamarin.Forms

Description

This help article will show you how to access the DataGrid Row info on SelectionChanged event.

Solution

Inside the SelectionChanged event handler, you're receiving a DataGridSelectionChangedEventArgs object which provides information on the selected item/items depending on the SelectionUnit and SelectionMode.

  • AddedItems - gets a list of the added items to the SelectedItems collection.

In the concrete case, SelectionUnit is "Row" and for example "SelectionMode is "Single" as these are the default values. So, inside the SelectionChanged event handler you can receive the data item of type Person(for example) presented in the selected row like this:

Here is the DataGrid definition:

<datagrid:RadDataGrid x:Name="dataGrid" 
                          ItemsSource="{Binding GridSource}" 
                          Grid.Row="4" 
                          Grid.ColumnSpan="4" 
                          SelectionChanged="dataGrid_SelectionChanged"
                          SelectionMode="Single"
                          SelectionUnit="Row" />

and the namespace used:

xmlns:datagrid="clr-namespace:Telerik.XamarinForms.DataGrid;assembly=Telerik.XamarinForms.DataGrid"

The SelectionChanged event:

private void dataGrid_SelectionChanged(object sender, Telerik.XamarinForms.DataGrid.DataGridSelectionChangedEventArgs e)
{
	if (e.AddedItems.Count() > 0)
	{
		var selectedItem = e.AddedItems.First() as Person;

		Application.Current.MainPage.DisplayAlert("Info for selected row", $"{selectedItem.Age}, {selectedItem.Name}, {selectedItem.Department}", "OK");
	}
}

and the used business model and ViewModel:

public class ViewModel
{

	public ViewModel()
	{
		this.GridSource = new ObservableCollection<Person>()
		{
			new Person { Name = "Kiko", Age = 23, Department = "Production" },
			new Person { Name = "Jerry", Age = 23, Department = "Accounting & Finance"},
			new Person { Name = "Ethan", Age = 51, Department = "Marketing" },
			new Person { Name = "Isabella", Age = 25, Department = "Marketing" },
			new Person { Name = "Joshua", Age = 45, Department = "Production" },
			new Person { Name = "Logan", Age = 26, Department = "Production"},
			new Person { Name = "Aaron", Age = 32, Department = "Production" },
			new Person { Name = "Elena", Age = 37, Department = "Accounting & Finance"},
			new Person { Name = "Ross", Age = 30, Department = "Marketing" }
		};

	}

	public ObservableCollection<Person> GridSource { get; set; }

   
}
public class Person
{
	public string Name { get; set; }
	public int Age { get; set; }
	public string Department { get; set; }
}