2014-11-04 6 views
1

Я хочу удалить строку по ее идентификатору, но я не могу удалить ее с помощью идентификатора Id.like, например, значения: дата | время | пол | зона | широта | долгота и я хочу удалить строку из ее при выборе его, но я cannot.below класс, где я написал все основные функцииНе удается удалить выбранную строку из базы данных sqlite

public class DbHelper 
{ 


    SQLiteConnection dbConn; 



    public async Task<bool> onCreate(string DB_PATH) 
    { 
     try 
     { 
      if (!CheckFileExists(DB_PATH).Result) 
      { 
       using (dbConn = new SQLiteConnection(DB_PATH)) 
       { 
        dbConn.CreateTable<historyTableSQlite>(); 
       } 
      } 
      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 
     { 
      return false; 
     } 
    } 

    //retrieve all list from the database 
    public ObservableCollection<historyTableSQlite> ReadHistory() 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      List<historyTableSQlite> myCollection = dbConn.Table<historyTableSQlite>().ToList<historyTableSQlite>(); 
      ObservableCollection<historyTableSQlite> HistoryList = new ObservableCollection<historyTableSQlite>(myCollection); 
      return HistoryList; 
     } 
    } 

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

    public void AddInfo() 
    { 
     //string f = Checkin.Floor_st; 
     Debug.WriteLine(Checkin.a); 
     string z = Checkin.Zone_st; 
     DbHelper Db_helper = new DbHelper(); 
     Db_helper.Insert((new historyTableSQlite 
     { 
      Date = DateTime.Now.ToShortDateString(), 
      Time = DateTime.Now.ToShortTimeString(), 
      Zone = "D", 
      Floor = "7", 
      latitude =12344.66, 
      longtitude = -122.56 
     })); 

    } 


    // Delete specific contact 
    public void DeleteContact(int Id) 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      var existingvalue = dbConn.Query<historyTableSQlite>("select * from historyTableSQlite where Id =" + Id).FirstOrDefault(); 
      if (existingvalue != null) 
      { 
       dbConn.RunInTransaction(() => 
       { 
        dbConn.Delete(existingvalue); 
       }); 
      } 
     } 
    } 

    //Delete all contactlist or delete Contacts table 
    public void DeleteAllContact() 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      //dbConn.RunInTransaction(() => 
      // { 
      dbConn.DropTable<historyTableSQlite>(); 
      dbConn.CreateTable<historyTableSQlite>(); 
      dbConn.Dispose(); 
      dbConn.Close(); 
      //}); 
     } 
    } 

} 

ниже класс, где я показываю значения

public partial class History : PhoneApplicationPage 
{ 
    ObservableCollection<historyTableSQlite> DB_HistoryList = new ObservableCollection<historyTableSQlite>(); 
    DbHelper Db_helper = new DbHelper(); 
    //int Selected_HistoryId; 
    public static int Selected_HistoryId { get; set; } 





    // string dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite"); 

    public History() 
    { 

     InitializeComponent(); 

    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 

     Db_helper.AddInfo(); 
     ReadHistoryList_Loaded(); 


     // Selected_HistoryId = int.Parse(NavigationContext.QueryString["SelectedHistoryID"]); 
    } 

    public void ReadHistoryList_Loaded() 
    { 
     ReadAllContactsList dbhistory = new ReadAllContactsList(); 
     DB_HistoryList = dbhistory.GetAllHistory();//Get all DB contacts 
     ListData.ItemsSource = DB_HistoryList.OrderByDescending(i => i.Id).ToList(); 

     //Latest contact ID can Display first 

    } 

    public void ListData_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (ListData.SelectedIndex != -1) 
     { 
      historyTableSQlite listitem = ListData.SelectedItem as historyTableSQlite; 
      int Selected_HistoryId = listitem.Id; 
     } 



    } 

    public void Delete_Click(object sender, EventArgs e) 

    { 
     Db_helper.DeleteContact(Selected_HistoryId); 
    } 

    private void DeleteAll_Click(object sender, EventArgs e) 
    { 
     DbHelper Db_helper = new DbHelper(); 
     Db_helper.DeleteAllContact();//delete all db 
     DB_HistoryList.Clear(); 
     ListData.ItemsSource = DB_HistoryList; 

    } 






    //public void updateDB(string fl,string zo,double la, double lo) 
    //{ 

    // using (var db = new SQLiteConnection(dbPath)) 
    // { 
    //  var existing = db.Query<historyTableSQlite>("select * from historyTableSQlite").FirstOrDefault(); 
    //  if (existing != null) 
    //  { 
    //   existing.Floor = fl; 
    //   existing.Zone = zo; 
    //   existing.latitude = la; 
    //   existing.longtitude = lo; 
    //   db.RunInTransaction(() => 
    //   { 
    //    db.Update(existing); 
    //   }); 
    //  } 




    // } 


    //} 

    //public void AddDb(string fl, string zo, double la, double lo) 
    //{ 
    // string dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite"); 
    // using (var db = new SQLiteConnection(dbPath)) 
    // { 
    //  db.RunInTransaction(() => 
    //  { 
    //   db.Insert(new historyTableSQlite() 
    //   { 
    //    Date = DateTime.Today.ToShortDateString(), 
    //    Time = DateTime.Now.ToShortTimeString(), 
    //    Floor = fl, 
    //    Zone = zo, 
    //    longtitude = la, 
    //    latitude = lo 
    //   }); 
    //   Debug.WriteLine(db); 
    //  }); 

    // } 





} 

Я обновив класс таблицы, так что это легко понять

public class historyTableSQlite : INotifyPropertyChanged 

{ [SQLite.PrimaryKey, SQLite.AutoIncrement]

public int Id { get; set; } 
private int idvalue; 

private string dateValue = string.Empty; 

public string Date { 
    get { return this.dateValue; } 
    set 
    { 
     if (value != this.dateValue) 
     { 
      this.dateValue = value; 
      NotifyPropertyChanged("Date"); 
     } 
    } 
} 


private string timeValue = string.Empty; 
public string Time 
{ 
    get { return this.timeValue; } 
    set 
    { 
     if (value != this.timeValue) 
     { 
      this.timeValue = value; 
      NotifyPropertyChanged("Time"); 
     } 
    } 
} 

private string floorValue = string.Empty; 
public string Floor 
{ 
    get { return this.floorValue; } 
    set 
    { 
     if (value != this.floorValue) 
     { 
      this.floorValue = value; 
      NotifyPropertyChanged("Floor"); 
     } 
    } 
} 

public string zoneValue; 
public string Zone 
{ 
    get { return this.zoneValue; } 
    set 
    { 
     if (value != this.zoneValue) 
     { 
      this.zoneValue = value; 
      NotifyPropertyChanged("Zone"); 
     } 
    } 
} 

private double latValue; 
public double latitude 
{ 
    get { return latValue; } 
    set 
    { 
     if (value != this.latValue) 
     { 
      this.latValue = value; 
      NotifyPropertyChanged("Latitude"); 
     } 
    } 
} 

private double lonValue; 
public double longtitude 
{ 
    get { return this.lonValue; } 
    set 
    { 
     if (value != this.lonValue) 
     { 
      this.lonValue = value; 
      NotifyPropertyChanged("Longitude"); 
     } 
    } 
} 

// общественная строка isMarkPoint {получить; задавать; }

public historyTableSQlite() 
{ 

} 

public historyTableSQlite(string date,string time,string floor,string zone,double lat,double lng) 
{ 
    Date = date; 
    Time = time; 
    Floor = floor; 
    Zone = zone; 
    latitude = lat; 
    longtitude = lng; 
} 
public event PropertyChangedEventHandler PropertyChanged; 

private void NotifyPropertyChanged(String info) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(info)); 
    } 
} 

}

, когда я нажимаю на удаление т.е. метод delete_click я не могу удалить строку

+1

Что «но я не могу удалить его Id» означает? У вас есть идентификатор выбранной строки? Вызывает ли инструкция delete исключение? – Marton

+0

@marton Я обновил код выше, а id автоматически увеличивается. Я хочу удалить строку (дата | время | пол | зона | широта | долгота), когда я ее выбираю, и когда я нажимаю delete (метод delete_click в history.xaml.cs) –

ответ

0

EDIT: Я вырезать и вставить код неправильно ... у вас есть очень плохое выравнивание :)

Хорошо, я думаю, что я, наконец, получил свой код для запуска, ваша проблема здесь

public void ListData_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (ListData.SelectedIndex != -1) 
    { 
     historyTableSQlite listitem = ListData.SelectedItem as historyTableSQlite; 

     // this will get destroy when the function exits, it's local decalartion 
     int Selected_HistoryId = listitem.Id; 

     // History.Selected_HistoryId = listitem.Id; 
     // you need to set the Property not a local variable 
    } 
} 

вы сделали локальную переменную с именем такой же, как недвижимость должна быть

History.Selected_HistoryId = listitem.Id; 

public void Delete_Click(object sender, EventArgs e) 
{ 
    Db_helper.DeleteContact(History.Selected_HistoryId); 
} 
+0

программное обеспечение @chuboosaurus Извините, но я не мог понять, что вы пытаетесь сказать. Я попытался написать this.Selected_HistoryId = listitem.Id вместо int Selected_HistoryId = listitem.Id; но он дает ошибку там –

+0

Спасибо за то, что заглянули в мой код. Я пытался использовать, как вы сказали, но он по-прежнему не может удалить. У меня была локальная переменная вне int Selected_HistoryId; то я выше метода, как вы сказали, я закодировал это. Выбрано_ИсторияId = listitem.Id; и последний в методе delete_click i закодирован Db_helper.DeleteContact (Selected_HistoryId); –

+0

@vivekshahi это потому, что вы передаете неправильный идентификатор, вы создаете локальный 'int Selected_HistoryId' внутри события ListData_SelectionChanged. Но вы используете статическое свойство в функции DeleteContact. Вы никогда не устанавливаете статическое свойство в результате значения 0. Нет такого, как идентификатор строки из 0. Подождите мин, я сделаю его немного более четким в решении. –

Смежные вопросы