Usuário com melhor resposta
Remover registros do meu datatable

Pergunta
-
Boa tarde,
estou começando a desenvolver em WPF e estou com problemas em remover uma pessoa do meu datatable através da seleção de uma checkboxcolumn em meu datagrid.
Segue parte do meu xaml:
<Window x:Class="Cadastro.wPessoas" 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:t="http://schemas.microsoft.com/wpf/2008/toolkit" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="clr-namespace:Cadastro;assembly=Cadastro" xmlns:local="clr-namespace:Cadastro" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" mc:Ignorable="d" Title="Pessoas" Height="840.532" Width="643.874"> <Grid Height="660" VerticalAlignment="Top"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <GroupBox Margin="0,608,0,-154" Grid.RowSpan="2"> <t:DataGrid Name="dgPessoas" Grid.Row="0" AutoGenerateColumns="False" CanUserDeleteRows="True" IsReadOnly="False" CanUserAddRows="False" HorizontalScrollBarVisibility="Auto" Width ="Auto" VerticalScrollBarVisibility="Auto" RowHeaderWidth="0" SelectionMode="Extended" SelectionUnit="FullRow" Margin="0,-172,-2,-6" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" ItemsSource="{Binding _dtPessoas}" Height="378" RenderTransformOrigin="0.511,0.603" PreviewMouseLeftButtonDown="dg_Preview"> <t:DataGrid.Columns> <t:DataGridCheckBoxColumn Width="30" Binding="{Binding Check, Mode=TwoWay}" CanUserReorder="False" CanUserResize="False" CanUserSort="False"> <t:DataGridCheckBoxColumn.HeaderTemplate> <DataTemplate> <CheckBox x:Name="chkGridAll" Width="auto" Margin="3,2,0,0" PreviewMouseLeftButtonDown="chk_Preview" Checked ="chkGrid_Checked" Unchecked="chkGridAll_Unchecked"/> </DataTemplate> </t:DataGridCheckBoxColumn.HeaderTemplate> </t:DataGridCheckBoxColumn> <t:DataGridTextColumn Binding="{Binding Id}" Header="ID" IsReadOnly="True" MinWidth="30" /> <t:DataGridTextColumn Binding="{Binding Nome}" Header="Nome" IsReadOnly="True" MinWidth="45"/> [etc]
code-behind do meu botao excluir:
private void btExcluir_Click(object sender, RoutedEventArgs e) { dgPessoas.UpdateLayout(); DataRowView row=(DataRowView)dgPessoas.SelectedItem; int _id = (int)row.Row.ItemArray[0]; if (dgPessoas.SelectedIndex != -1) { if (!(Xceed.Wpf.Toolkit.MessageBox.Show("Você está prestes a excluir uma pessoa. Por favor confirme", "Excluir pessoa", MessageBoxButton.OKCancel) == MessageBoxResult.OK)) { e.Handled = true; } else { Pessoa.ExcluiPessoa(_id); CarregaLista(); AlteraBotoes(); } } else { Xceed.Wpf.Toolkit.MessageBox.Show("Selecione pelo menos uma pessoa para excluir da lista"); return; } foreach (DataGridRow row in dgPessoas.Items) { if (_chk.IsChecked == true) { int _id = Pessoa._dtPessoas.Select } } }
(lembrando que está excluindo pela seleção do mouse e preciso excluir pela seleção das checkboxes).
Como proceder?
Respostas
-
Achei a solução:
private void btExcluir_Click(object sender, RoutedEventArgs e)
{
dgPessoas.UpdateLayout();
try
{
if (_lstSelec.Count > 0)
{
Pessoa.ExcluiPessoa(_lstSelec);
CarregaLista();
_lstSelec.Clear();
}
}
catch (Exception ex)
{
Xceed.Wpf.Toolkit.MessageBox.Show(ex.Message);
}
}private void dgPessoas_RowEditEnding(object sender, Microsoft.Windows.Controls.DataGridRowEditEndingEventArgs e)
{
FrameworkElement element = dgPessoas.Columns[0].GetCellContent(e.Row);
if (element.GetType() == typeof(CheckBox))
{
if (((CheckBox)element).IsChecked == true)
{
CheckBox _check = dgPessoas.Columns[0].GetCellContent(dgPessoas.SelectedItem) as CheckBox;
FrameworkElement _cellID = dgPessoas.Columns[1].GetCellContent(e.Row);
for (int i = 0; i < dgPessoas.Items.Count; i++)
{
if (_check.IsChecked != null)
{
int ID = Convert.ToInt32(((TextBlock)_cellID).Text);
_lstSelec.Add(ID);
}
}
}
}
}
private void chkGridAll_Checked(object sender, RoutedEventArgs e)
{
for (int i = 0; i < dgPessoas.Items.Count; i++)
{
dgPessoas.SelectedIndex = i;
CheckBox _check = dgPessoas.Columns[0].GetCellContent(dgPessoas.SelectedItem) as CheckBox;
FrameworkElement _cellID = dgPessoas.Columns[1].GetCellContent(dgPessoas.SelectedItem);
ID = Convert.ToInt32(((TextBlock)_cellID).Text);
_lstSelec.Add(ID);
if (_check != null)
{
_check.IsChecked = true;
}
}
}
private void chkGridAll_Unchecked(object sender, RoutedEventArgs e)
{
for (int i = 0; i < dgPessoas.Items.Count; i++)
{
dgPessoas.SelectedIndex = i;
CheckBox Check = dgPessoas.Columns[0].GetCellContent(dgPessoas.SelectedItem) as CheckBox;
if (Check != null)
{
Check.IsChecked = false;
}
}
}E na classe Pessoa
public static void ExcluiPessoa(List<int>_lstID)
{
List<Pessoa> remove = new List<Pessoa>();
foreach (var item in _lstID)
{
remove = _lst.Where(x => x.Id.Equals(item)).ToList();
remove.ForEach(x => _lst.Remove(x));
}
ToDataTable(_lst, _dtPessoas);
MessageBox.Show("Pessoa excluída com sucesso", "Exclusão", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
- Marcado como Resposta Gustavo Henrique Marcelino dos Santos sexta-feira, 3 de março de 2017 13:49