エンティティ フレームワークを使用して、組織がデータをデータベースに入力してレコードを表示するためのデスクトップ アプリケーションを作成しています。
tab control
検証済みの を使用してを作成しましたdata template
。これにより、必要な必須フィールドを保存できるようになりました。
追加された詳細を表示するために、ページ上で一連の異なるデータ グリッドを使用しました。このページ内にはcommands
、ユーザーがコンテンツを追加、更新、または削除できるようにする一連のさまざまなページが含まれています (テーブルによっては、更新のみが許可されます)。
しかし、これは私が動けなくなるところです。これまでのところ、add メソッドと delete メソッドは完全に機能しますが、テーブルの更新になると、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);
}
}
xaml;
IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding LoadEmployee}"
SelectedItem="{Binding SelectEmployee}" Grid.RowSpan="2">
まず、ユーザーがデータ グリッドから行を選択すると、その特定の行が更新されます。ビューモデルに渡されるように、ビューモデルのプロパティを xaml のテキスト フィールドにバインドしました。また、ビュー モデル内に ID プロパティをハード コードしようとしました。public int _EmployeeID = 11;
public int _OrganisationID = 4;
しかし、これはまだスローしNull Reference Exception
ます。
誰でも私と一緒にこの問題を解決するのを手伝ってもらえますか? いろいろな方法を試してみましたが、まだ役に立ちません。私はWPFを初めて使用し、MVVMを実装しようとしています。明らかに完全なMVVMではありませんが、正しい実装方法をゆっくりと確実に学んでいます。乾杯。