我正在使用实体框架为组织创建桌面应用程序,以便将数据输入数据库以显示其记录。
我使用tab control
创建了一个data template
,该commands
已经过验证,可以让他们保存必要的必填字段,这些字段到目前为止一直很好。
我在页面上使用了一系列不同的数据网格来显示已添加的详细信息。在此页面中,它包含一系列不同的Null Reference Exception
,允许用户添加,更新或删除内容(取决于表,只允许他们更新)。
但这就是我失势的地方。到目前为止,添加和删除方法工作得很好,但是当它归结为更新表时,它会抛出 public List<Employee> LoadEmployee
{
get
{
using (DBEntities context = new DBEntities())
{
var query = from e in context.Employees
select e;
return query.ToList<Employee>();
}
}
}
public void UpdateEmployee()
{
var employee = new Employee();
using (DBEntities context = new DBEntities())
{
//var emp = context.Employees.Where(e => e.EmployeeID == employee.EmployeeID).FirstOrDefault();
var emp = (from a in context.Employees
where a.EmployeeID == EmployeeID
select a).FirstOrDefault();
if (emp == null)
{
emp.EmployeeID = EmployeeID;
emp.OrganisationID = OrganisationID;
emp.Title = Title;
emp.FirstName = FirstName;
emp.Surname = Surname;
emp.Position = Position;
emp.DateOfBirth = DateOfBirth;
emp.Address = Address;
emp.Country = Country;
emp.Postcode = Postcode;
emp.PhoneNumber = PhoneNumber;
emp.MobileNumber = MobileNumber;
emp.FaxNumber = FaxNumber;
emp.Email = Email;
emp.NINumber = NINumber;
emp.ChargableResource = ChargableResource;
emp.ChargeOutRate = ChargeOutRate;
emp.TimeSheetRequired = TimeSheetRequired;
emp.WorkShift = WorkShift;
emp.WorkShift = BenefitsProvided;
//context.Employees.Attach(emp);
context.SaveChanges();
MessageBox.Show("Updated Employee Details");
}
else
{
MessageBox.Show("Unable to update selected item.");
}
}
}
public Employee _SelectedEmployee;
public Employee SelectedEmployee
{
get
{
return _SelectedEmployee;
}
set
{
if (_SelectedEmployee == value)
return;
_SelectedEmployee = value;
OnPropertyChanged("_SelectedEmployee");
}
}
。
以下是一些代码段; 查看 - 型号:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
listview.DataContext = new EmployeeViewModel();
}
private void btnupdate_Click(object sender, RoutedEventArgs e)
{
var emp = new EmployeeViewModel();
Employee selected = listview.SelectedItem as Employee;
if (selected == null)
MessageBox.Show("You must select a 'Employee' before updating.");
else
{
UpdateEmployeeView update = new UpdateEmployeeView();
update.ShowDialog();
Window_Loaded(null, null);
}
}
代码背后:
IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding LoadEmployee}"
SelectedItem="{Binding SelectEmployee}" Grid.RowSpan="2">
XAML;
public int _EmployeeID = 11;
public int _OrganisationID = 4;
首先,当用户从数据网格中选择一行时,我希望更新该特定行。我已将我的视图模型中的属性绑定到我的xaml中的文本字段,以便它传递给视图模型。我还尝试在视图模型中硬编码ID属性; Null Reference Exception
但这仍然会引发{{1}}。
任何人都可以帮我解决这个问题吗?我一直在尝试各种不同的方式,仍然没有用。我是WPF的新手,并试图实现MVVM,显然它不是完全MVVM,但我慢慢地,但肯定是在学习实现它的正确方法。 欢呼声。
答案 0 :(得分:2)
if (emp == null)
{
添加行:
emp = new Employee();
否则,您要将值赋给null变量。
答案 1 :(得分:1)
在我的代码隐藏中,我已将TextBox
映射到EF中的Entities
(我知道这是实现MVVM
的错误方法,但我仍在学习这将是改变。
基本上,我将所有textbox
分配给项目,而不是分配ID。因此,它不允许我更新,因为由于没有分配ID,它无法识别要更新的表中的哪个项目。
像这样;
txtID.Text = type.OrganisationTypeDetailID.ToString();