New to Telerik UI for WPF? Download free 30-day trial

Deleting an Entry

GridView allows you to easily delete rows using the Del key or programmatically.

The control doesn't have built-in UI for deleting rows, but it provides a command that allows to do that easily. The RadGridViewCommands.Delete is a RoutedUICommand that can be assigned directly to a button or any other element that supports commands. The command can be executed also manually in code.

Another option to delete rows is to remove the data items from the ItemsSource collection of the RadGridView.

To disable the Del key deletion set the CanUserDeleteRows property of RadGridView to true.

The following examples show how to manually remove items from the ItemsSource.

<StackPanel x:Name="LayoutRoot"> 
    <Button Content="Delete" 
    Click="Button_Click" /> 
    <telerik:RadGridView x:Name="radGridView" 
                     AutoGenerateColumns="False"> 
        <!--...--> 
    </telerik:RadGridView> 
</StackPanel> 
To determine which items are to be removed, use the SelectedItems collection of the RadGridView. You can also use the SelectedItem or the CurrentItem objects, but the SelectedItems collection is more flexible and allows your deleting logic to function even by multiple selection.

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ObservableCollection<Employee> itemsToRemove = new ObservableCollection<Employee>(); 
 
    foreach (Employee item in this.radGridView.SelectedItems) 
    { 
        itemsToRemove.Add(item); 
    } 
    foreach (Employee item in itemsToRemove) 
    { 
        ((ObservableCollection<Employee>)this.radGridView.ItemsSource).Remove(item); 
    } 
} 

When an item is removed from the ItemsSource collection it is also removed from the SelectedItems collection. This means that you cannot directly use the SelectedItems in the same foreach, where the items get removed, because it will result in an exception. This is where the itemsToRemove comes in hand.

Here is an example of a sample deleting logic implemented in the event handler for a Button's Click event.

private void Button2_Click(object sender, RoutedEventArgs e) 
{ 
    if (this.radGridView.SelectedItems.Count == 0) 
    { 
        return; 
    } 
 
    ObservableCollection<Employee> itemsToRemove = new ObservableCollection<Employee>(); 
 
    //Remove the items from the RadGridView 
    foreach (var item in this.radGridView.SelectedItems) 
    { 
        itemsToRemove.Add(item as Employee); 
    } 
    foreach (var item in itemsToRemove) 
    { 
        ((ObservableCollection<Employee>)this.radGridView.ItemsSource).Remove(item as Employee); 
    } 
} 

In this example the implementation manages both the RadGridView and the data storage. Of course it is up to the developer to shape the deleting logic, so it suits the application requirements in the best way.