リストボックスのアイテムを削除すると、下のスクリーンショットに示すように、質問にエラーが表示されます。
私は内部の例外がどこにあるのかわかりませんが、私は試してみましたが、キャッチしましたが、質問で同じエラーが発生しました。
すべてのコードは次のとおりです。
namespace WpfApplication7
{
/// <summary>
/// Interaction logic for Edit_Rooms.xaml
/// </summary>
public partial class Edit_Rooms : Window
{
public Edit_Rooms()
{
InitializeComponent();
}
//initialises entities
WpfApplication7.AllensCroftEntities1 allensCroftEntities1 = new WpfApplication7.AllensCroftEntities1();
private Room ObjectIndex;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// Load data into Rooms.
System.Windows.Data.CollectionViewSource roomsViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("roomsViewSource")));
//runs a query to go the roomsQuery to get the rooms table from the entities
System.Data.Objects.ObjectQuery<WpfApplication7.Room> roomsQuery = this.GetRoomsQuery(allensCroftEntities1);
//used when adding new rooms
roomsViewSource.Source = roomsQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
}
private System.Data.Objects.ObjectQuery<Room> GetRoomsQuery(AllensCroftEntities1 allensCroftEntities1)
{
System.Data.Objects.ObjectQuery<WpfApplication7.Room> roomsQuery = allensCroftEntities1.Rooms;
// Returns an ObjectQuery.
return roomsQuery;
}
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
//prevents user trying to delete nothing/unselected row
if (ObjectIndex == null)
{
MessageBox.Show("Cannot delete the blank entry");
}
else
{
//deletes object from dataset, saves it and outputs a message
allensCroftEntities1.DeleteObject(ObjectIndex);
allensCroftEntities1.SaveChanges();
MessageBox.Show("Room Deleted");
}
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
try
{
//attempts to save changes
allensCroftEntities1.SaveChanges();
MessageBox.Show("Saved");
}
catch (Exception ex)
{
//if unsuccessful, outputs an error message
MessageBox.Show(ex.ToString());
}
}
private void btnFirst_Click(object sender, RoutedEventArgs e)
{
listbox.SelectedIndex = 0;
}
private void btnPrevious_Click(object sender, RoutedEventArgs e)
{
//prevents user going to the previous item before the first item
if (listbox.SelectedIndex > 0)
{
listbox.SelectedIndex -= 1;
}
}
private void btnNext_Click(object sender, RoutedEventArgs e)
{
//prevents user going after last item and throwing up an error
if (listbox.SelectedIndex < listbox.Items.Count)
{
listbox.SelectedIndex += 1;
}
}
private void btnLast_Click(object sender, RoutedEventArgs e)
{
listbox.SelectedIndex = listbox.Items.Count - 1;
}
private void listbox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//outputs index of the selected room
ObjectIndex = listbox.SelectedItem as Room;
}
}
}
[詳細の表示...]をクリックすると、ウィンドウが開き、[内部例外]を展開できます。レコードを削除しようとすると、参照制約違反があると推測します。内部例外により、その詳細が提供されるため、レコードを削除する前にコードを変更して参照を削除できます。
[詳細を表示]をクリックして、内部の例外を見つけます。