2017-08-02 7 views
3

So aktualisieren Sie UserInterface, wenn ein Listenfeldelement aus ListBox gelöscht wird. Das ListBoxItem wird aus der Datenbank gelöscht, aber das Listenfeld wird nicht aktualisiert. Wenn ich die Zurück-Taste drücke und zu der Seite navigiere, wird sie gelöscht. Jemand kann mir sagen, wie man die Listbox aktualisiert. Ich denke, es ist aufgrund der beobachtbaren Sammlung, ich weiß nicht, wie NotifyProperty für diesen Code geändert zu implementieren.Kann jemand mir bitte helfen?ListBox wird nicht aktualisiert, wenn listBoxItem in c gelöscht wird #

C# Code einzufügen, lesen und löschen Sie Elemente aus der Datenbank

public class DatabaseHelperClass 
{ 

    SQLiteConnection dbConn; 

    //Create Tabble 
    public async Task<bool> onCreate(string DB_PATH) 
    { 
     try 
     { 
      if (!CheckFileExists(DB_PATH).Result) 
      { 
       using (dbConn = new SQLiteConnection(DB_PATH)) 
       { 
        dbConn.CreateTable<Data>(); 
       } 
      } 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
    private async Task<bool> CheckFileExists(string fileName) 
    { 
     try 
     { 
      var store = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName); 
      return true; 
     } 
     catch (NullReferenceException exp) 
     { 
      return false; 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 
    } 

    // Retrieve the specific contact from the database. 
    public Data ReadContact(int contactid) 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      var existingconact = dbConn.Query<Data>("select * from Contacts where Id =" + contactid).FirstOrDefault(); 
      return existingconact; 
     } 
    } 
    // Retrieve the all contact list from the database. 
    public ObservableCollection<Data> ReadContacts() 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      List<Data> myCollection = dbConn.Table<Data>().ToList<Data>(); 
      ObservableCollection<Data> ContactsList = new ObservableCollection<Data>(myCollection); 

      return ContactsList; 
     } 

} 


    // Insert the new contact in the Contacts table. 
    public void Insert(Data newcontact) 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      dbConn.RunInTransaction(() => 
      { 
       dbConn.Insert(newcontact); 
      }); 
     } 
    } 

    //Delete specific contact 
    public void DeleteContact(int Id) 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      var existingconact = dbConn.Query<Data>("select * from Data where Id =" + Id).FirstOrDefault(); 
      if (existingconact != null) 
      { 
       dbConn.RunInTransaction(() => 
       { 
        dbConn.Delete(existingconact); 
       }); 
      } 
     } 
    } 
    //Delete all contactlist or delete Contacts table 
    public void DeleteAllContact() 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      //dbConn.RunInTransaction(() => 
      // { 
      dbConn.DropTable<Data>(); 
      dbConn.CreateTable<Data>(); 
      dbConn.Dispose(); 
      dbConn.Close(); 
      //}); 
     } 
    } 
} 

Code Artikel aus der Liste zu löschen.

public partial class Panaroma : Page 
{ 
    ObservableCollection<Data> DB_ContactList = new ObservableCollection<Data>(); 


    public Panaroma() 
    { 
     this.InitializeComponent(); 
     if(listBoxobj.Items.Count == 0) 
     { 
      Btn_Delete.IsEnabled = false; 
     } 


     this.Loaded += Panaroma_Loaded; 

    } 

    private void Panaroma_Loaded(object sender, RoutedEventArgs e) 
    { 
     ReadAllData dbcontacts = new ReadAllData(); 

     DB_ContactList = dbcontacts.GetAllContacts();//Get all DB contacts 
     if (DB_ContactList.Count > 0) 
     { 
      Btn_Delete.IsEnabled = true; 
     } 
     listBoxobj.ItemsSource = DB_ContactList.OrderByDescending(i => i.Id).ToList();//Binding DB data to LISTBOX and Latest contact ID can Display first. 

    } 


    private void listBoxobj_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     int SelectedContactID = 0; 
     if (listBoxobj.SelectedIndex != -1) 
     { 
      Data listitem = listBoxobj.SelectedItem as Data;//Get slected listbox item 
      DatabaseHelperClass Db_Helper = new DatabaseHelperClass(); 
      Db_Helper.DeleteContact(listitem.Id);//Delete selected DB contact Id. 
     } 
    } 
+1

Sie nur aus der Datenbank den ausgewählten Eintrag zu löschen. Außerdem sollten Sie es aus der Sammlung löschen und die Sammlung aktualisieren. Für die Implementierung der INotifyPropertyChanged-Schnittstelle gibt es ein paar gute Beispiele hier bei SO. – Ben

+0

Hallo @ Ben, Wie lösche ich das ausgewählte Objekt aus der Sammlung? – Rachel

Antwort

2

Um ein Element aus der Sammlung, die Methode Remove (listitem) msdn und aktualisieren Sie die damit verbundenen ListBox zu entfernen.

private void listBoxobj_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    int SelectedContactID = 0; 
    if (listBoxobj.SelectedIndex != -1) 
    { 
     Data listitem = listBoxobj.SelectedItem as Data;//Get slected listbox item 
     DatabaseHelperClass Db_Helper = new DatabaseHelperClass(); 
     Db_Helper.DeleteContact(listitem.Id);//Delete selected DB contact Id. 
     //remove item from collection 
     DB_ContactList.Remove(listitem); 
     //update listbox 
     //... 
    } 
} 

die List-Box zu aktualisieren haben einen Blick auf diese post

+0

Danke @ Ben, das Problem ist jetzt gelöst. – Rachel

Verwandte Themen