Friday, January 23, 2015

Deleting Multiple Rows in Datagrid

Design 

<UserControl x:Class="SL4_Deleting_Multiple_Rows_DataGrid.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:data="clr-namespace:SL4_Deleting_Multiple_Rows_DataGrid"
mc:Ignorable="d"
d:DesignHeight="327" d:DesignWidth="637"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
Loaded="UserControl_Loaded">
<UserControl.Resources>
<data:EmployeeCollection x:Key="EmpDs"></data:EmployeeCollection>
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="White" 
DataContext="{Binding Source={StaticResource EmpDs}}">
<sdk:DataGrid AutoGenerateColumns="False" Height="227" 
HorizontalAlignment="Left" Margin="25,23,0,0" 
Name="dataGrid1" VerticalAlignment="Top" Width="584"
ItemsSource="{Binding}" >
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="EmpNo" 
Binding="{Binding EmpNo}">                    
</sdk:DataGridTextColumn>
<sdk:DataGridTextColumn Header="EmpName" 
Binding="{Binding EmpName}">                    
</sdk:DataGridTextColumn>
<sdk:DataGridTextColumn Header="Salary" 
Binding="{Binding Salary}">                    
</sdk:DataGridTextColumn>
<sdk:DataGridTextColumn Header="Designation" 
Binding="{Binding Designation}">                    
</sdk:DataGridTextColumn>
<sdk:DataGridTemplateColumn Header="Delete?">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="chkbkDelete" 
Click="chkbkDelete_Click"></CheckBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
<Button Content="Delete Selected Rows" Height="23" 
HorizontalAlignment="Left" Margin="25,267,0,0" 
Name="btnDeleteRows" VerticalAlignment="Top" 
Width="245" Click="btnDeleteRows_Click" />
</Grid>
</UserControl>
 
The CheckBox in the DataGrid Template Column defines the Click event. 
When any checkbox   is checked, that row from the DataGrid is considered
marked for deletion.
 
Coding

using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Collections.ObjectModel;

namespace SL4_Deleting_Multiple_Rows_DataGrid
{
public partial class MainPage : UserControl
{
ObservableCollection<Employee> EmptoDelete;
public MainPage()
{
InitializeComponent();
}

private void chkbkDelete_Click(object sender, RoutedEventArgs e)
{
CheckBox chbkDelete = sender as CheckBox;
bool? res = chbkDelete.IsChecked;
if ((bool)res)
{
EmptoDelete.Add(dataGrid1.SelectedItem as Employee);
}
else
{
EmptoDelete.Remove(dataGrid1.SelectedItem as Employee);
}
}

private void btnDeleteRows_Click(object sender, RoutedEventArgs e)
{
try
{
EmployeeCollection EmpCol = 
this.Resources["EmpDs"] as EmployeeCollection;

if (EmptoDelete.Count > 0)
{
int count = 0;
foreach (Employee Emp in EmptoDelete)
{
Employee emp = (from ep in EmpCol
where ep.EmpNo == Emp.EmpNo
select ep).First();
EmpCol.Remove(emp);
count++;
}
EmptoDelete.Clear();
MessageBox.Show(count + "'s Rows Deleted");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
EmptoDelete = new ObservableCollection<Employee>();
}
}
} 

No comments:

Post a Comment