2017-01-25 2 views
1

Ich versuche, C# -WPF-Anwendung mit Microsoft SQL Server-Datenbank zu erstellen. So etwas wie Gesellschaft Manager jetzt will ich Code Mitarbeiter Management:Was ist der beste Weg zum Löschen von Datensätzen aus der Datenbank mit DataGrid

  • Hinzufügen/Ändern/Löschen Mitarbeiter

I erstellt Mitarbeitermodell, DbContext und Seite mit Datagrid mit Binded Datenbank. Dann habe ich AddEmployeeButton_Click(); in meiner EmployeePage.xaml.cs.

private void AddEmployeeButton_Click(object sender, RoutedEventArgs e) 
    { 
     using (var databaseContext = new CompanyManagerContext()) 
     { 
      var newEmployee = new Employee 
      { 
       FirstName = FirstNameTextBox.Text, 
       LastName = LastNameTextBox.Text, 
       BirthDate = BirthdayDatePicker.SelectedDate, 
       HomePhoneNumber = HomePhoneTextBox.Text, 
       MobilePhoneNumber = MobilePhoneTextBox.Text, 
       MailAdress = EmailTextBox.Text, 
       State = StateTextBox.Text, 
       City = CityTextBox.Text, 
       ZipCode = ZipCodeTextBox.Text, 
       Street = StreetTextBox.Text, 
      }; 

      try 
      { 
       databaseContext.Employees.Add(newEmployee); 
       databaseContext.SaveChanges(); 
      } 

      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

     ClearEmployeeData(); 
     EmployeesDataGrid.Items.Refresh(); 
    } 

aber mein Problem wie create DeleteEmployeeButton_Click(); Ich möchte eine Methode (auf DeleteEmployeeButton_Click()), die ausgewählte Datensätze löschen. Was ist der beste Weg, es zu tun?

Das ist mein XAML EmployeePage:

<Page x:Class="CompanyManager.Pages.EmployeePages" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:models="clr-namespace:CompanyManager.Core.Models" 
     mc:Ignorable="d" 
     d:DesignHeight="700" d:DesignWidth="900" 
     Title="EmployeePages"> 
<Page.Resources> 
    <CollectionViewSource x:Key="CollectionViewSource" 
          d:DesignSource="{d:DesignInstance {x:Type models:Employee}, CreateList=True}"></CollectionViewSource> 
</Page.Resources> 

<Grid Background="White"> 
    <Grid x:Name="ContentArea"> 
     <!-- Personal Details --> 
     <Label x:Name="FirstNameLabel" Content="First Name" Margin="25,30,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
     <Label x:Name="LastNameLabel" Content="Last Name" Margin="25,60,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
     <Label x:Name="BirthdayLabel" Content="Birthday date" Margin="25,90,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 

     <TextBox x:Name="FirstNameTextBox" Margin="250,31,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></TextBox> 
     <TextBox x:Name="LastNameTextBox" Margin="250,62,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></TextBox> 
     <DatePicker x:Name="BirthdayDatePicker" Margin="250,92,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></DatePicker> 

     <!-- Contact --> 
     <Label x:Name="HomePhoneLabel" Content="Home phone number" Margin="25,120,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
     <Label x:Name="MobilePhoneLabel" Content="Mobile phone number" Margin="25,150,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
     <Label x:Name="EmailLabel" Content="Email Adress" Margin="25,180,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 

     <TextBox x:Name="HomePhoneTextBox" Margin="250,120,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></TextBox> 
     <TextBox x:Name="MobilePhoneTextBox" Margin="250,151,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></TextBox> 
     <TextBox x:Name="EmailTextBox" Margin="250,182,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></TextBox> 

     <!-- ADRESS --> 
     <Label x:Name="StateLabel" Content="State" Margin="25,210,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
     <Label x:Name="CityLabel" Content="City" Margin="25,240,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
     <Label x:Name="ZipCodeLabel" Content="Zip Code" Margin="25,270,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
     <Label x:Name="StreetLabel" Content="Street" Margin="25,300,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 

     <TextBox x:Name="StateTextBox" Margin="250,212,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></TextBox> 
     <TextBox x:Name="CityTextBox" Margin="250,243,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></TextBox> 
     <TextBox x:Name="ZipCodeTextBox" Margin="250,273,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></TextBox> 
     <TextBox x:Name="StreetTextBox" Margin="250,302,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="26"></TextBox> 

     <!-- Job details --> 
     <Label x:Name="JobPositionLabel" Content="Jobposition" Margin="25,330,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="30" Width="81"/> 
     <Label x:Name="SalaryLabel" Content="Salary" Margin="25,360,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="25" Width="58"/> 


     <!-- <Image x:Name="EmployeePhoto" Margin="25,425,705,115"/> --> 
     <!-- DataGrid --> 
     <DataGrid x:Name="EmployeesDataGrid" HorizontalAlignment="Left" Margin="545,31,0,0" VerticalAlignment="Top" Height="554" Width="290" 
        DataContext="{StaticResource CollectionViewSource}" 
        AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" RowDetailsVisibilityMode="VisibleWhenSelected" IsReadOnly="True"> 
      <DataGrid.Columns> 
       <DataGridTextColumn x:Name="IdColumn" Header="Id" Binding="{Binding Id}"/> 
       <DataGridTextColumn x:Name="FirstNameColumn" Header="First Name" Binding="{Binding FirstName}"/> 
       <DataGridTextColumn x:Name="LastNameColumn" Header="Last Name" Binding="{Binding LastName}"/> 
       <DataGridTextColumn x:Name="MobilePhoneNumberColumn" Header="Mobile Phone" Binding="{Binding MobilePhoneNumber}"/> 
      </DataGrid.Columns> 
     </DataGrid> 

    </Grid> 

    <Grid x:Name="ButtonsArea"> 
     <Button Name="AddEmployeeButton" Content="Add Employee" Margin="28,625,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="AddEmployeeButton_Click"/> 
     <Button Name="EditEmployeeButton" Content="Edit Employee" Margin="138,625,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="EditEmployeeButton_Click"/> 
     <Button Name="DeleteEmployeeButton" Content="Delete Employee" Margin="245,625,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Click="DeleteEmployeeButton_Click"/> 
    </Grid> 
</Grid> 

Antwort

1

Vorausgesetzt, dass Sie die Source-Eigenschaft des CollectionViewSource auf einen IEnumerable<Employee> eingestellt haben Sie zum Beispiel die PreviewKeyDown Ereignis für das Datagrid wie damit umgehen könnte:

<DataGrid x:Name="EmployeesDataGrid" HorizontalAlignment="Left" Margin="545,31,0,0" VerticalAlignment="Top" Height="554" Width="290" 
        DataContext="{StaticResource CollectionViewSource}" 
        AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" RowDetailsVisibilityMode="VisibleWhenSelected" IsReadOnly="True" 
        PreviewKeyDown="dg_PreviewKeyDown"> 
    <DataGrid.Columns> 
     <DataGridTextColumn x:Name="IdColumn" Header="Id" Binding="{Binding Id}"/> 
     <DataGridTextColumn x:Name="FirstNameColumn" Header="First Name" Binding="{Binding FirstName}"/> 
     <DataGridTextColumn x:Name="LastNameColumn" Header="Last Name" Binding="{Binding LastName}"/> 
     <DataGridTextColumn x:Name="MobilePhoneNumberColumn" Header="Mobile Phone" Binding="{Binding MobilePhoneNumber}"/> 
    </DataGrid.Columns> 
</DataGrid> 

private void dg_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    Employee employee = EmployeesDataGrid.SelectedItem as Employee; 
    if (employee != null) 
    { 
     using (var databaseContext = new CompanyManagerContext()) 
     { 
      try 
      { 
       databaseContext.Employees.Attach(employee); 
       databaseContext.Employees.Remove(employee); 
       databaseContext.SaveChanges(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 
} 

Dann sollten Sie in der Lage sein, einen Datensatz zu löschen, indem Sie eine Zeile auswählen und die [LÖSCHEN] -Taste drücken.

+0

Ich habe versucht, auf diese Weise vor zu verwenden, aber ich erhielt einen Fehler: „Das Objekt kann nicht gelöscht werden, da sie nicht in der Object gefunden wurde“ – MadMike6661

+0

Was ist, wenn Sie es an, bevor Sie es zu entfernen, wie hier vorgeschlagen ?: http://StackOverflow.com/questions/7791149/the-object-cannot-be-deleted-because-it-was-not-found-in-the-objectstatemanager – mm8

+0

Ja, es funktioniert jetzt. Danke, Mann. – MadMike6661

Verwandte Themen