我正在尝试使用microsoft sql server数据库创建C#WPF应用程序。 像公司经理那样,现在我想对员工管理进行编码:
我使用带有绑定数据库的DataGrid创建了Employee模型,dbContext和页面。 然后我做了AddEmployeeButton_Click();在我的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();
}
但我的问题是如何创建DeleteEmployeeButton_Click(); 我想创建一个删除所选记录的方法(在DeleteEmployeeButton_Click()上)。这是最好的方法吗?
这是我的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>
答案 0 :(得分:1)
如果您已将CollectionViewSource
的Source属性设置为IEnumerable<Employee>
,则可以为此处理DataGrid的PreviewKeyDown
事件,如下所示:
<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);
}
}
}
}
然后您可以通过选择一行并按[删除]按钮来删除记录。