locked
Как удалять записи из БД SQLite для Windows Phone? RRS feed

  • Вопрос

  • Добрый день!
    Не могу понять как удалять данные из ListBox? Разобрался с добавлением записей из TextBox в бд и их отображением в ListBox, а вот как удалить выделенную запись в ListBox не могу допереть. 
    Заранее спасибо за ответ.
    10 июля 2014 г. 7:46

Ответы

  • Исходники его найти не могу и возможности семпл собрать нет. Поэтому гугл привел меня к этому

    Там находим пролистываем и видим пример удаления. У класса SQLiteConnection есть метод Delete, который, походу, принимает object item


    21 июля 2014 г. 15:06

Все ответы

  • dbConnection.Table<YourTable>().DeleteAsync(...)

    Там есть такое?

    16 июля 2014 г. 7:40
  • попробовал сделать вот так:

    dbConn.Delete<Task>(listBox.SelectedItem.ToString());
                    var d = from x in dbConn.Table<Task>()
                            select x;
                    listBox.Items.Clear();
    
                    foreach (var t in d)
                    {
                        listBox.Items.Add(t.Text.ToString());
                        //listBox.Items.Add(t.Title.ToString());
                    }

    и результат нулевой, ничего не удаляет

    18 июля 2014 г. 12:18
  • У Вас есть такая таблица с типом "Task"? 

    Посмотрите внимательно что он принимает, уж точно не строковый объект, если Вы указали тип таблицы Task.

    18 июля 2014 г. 12:25
  • Да, есть 

    public class Task
        {
            [SQLite.AutoIncrement, SQLite.PrimaryKey]
            public int ID { get; set; }
            public String Title { get; set; }
            public String Text { get; set; }
        }

    18 июля 2014 г. 12:43
  • Разве 

    db.conn.Delete<Task>(..)


    принимает строку?

    18 июля 2014 г. 13:28
  • уже попробовал добавить вот это

     public override string ToString()
            {
                return Title;
            }

    в таблицу Task, все равно не помогает

    21 июля 2014 г. 14:00
  • dbConnection.Table<YourTable>().DeleteAsync(...)

    Там есть такое?

    Этого тоже нет.
    21 июля 2014 г. 14:14
  • Какого типа у Вас dbConn ?
    21 июля 2014 г. 14:42
  • SQLiteConnection
    21 июля 2014 г. 14:49
  • Исходники его найти не могу и возможности семпл собрать нет. Поэтому гугл привел меня к этому

    Там находим пролистываем и видим пример удаления. У класса SQLiteConnection есть метод Delete, который, походу, принимает object item


    21 июля 2014 г. 15:06
  • Спасибо, буду разбираться
    21 июля 2014 г. 15:09
  • В общем немного разобрался, как удалять запись, и это работает, немного не так как нужно, поэтому буду дальше допиливать
    dbConn.Delete (new Task()
        {
            Id = int.Parse(TextBox1.Text),
            Text = TextBox2.Text
        });

    28 июля 2014 г. 3:25
  • Можете попробовать сперва из БД вытащить существующий объект по ИД и отправить его на удаление.
    28 июля 2014 г. 9:13
  • А можете объяснить немного подробнее как это сделать? 
    28 июля 2014 г. 14:50
  • Нет сразу так не скажу, давайте учиться. Вот Вы данные как вытаскиваете?

    28 июля 2014 г. 15:02
  • Если просто вытащить данные из таблицы, то для меня самое понятное, через sql запрос: 
    select * from Task 

    28 июля 2014 г. 15:14
  • Потому что вот такие конструкции не до конца понимаю

    Task task = new Task() { Title = textBox1.Text.ToString(), Text = textBox2.Text.ToString()

    }; dbConn.Insert(task); List<Task> retrievedTasks = dbConn.Table<Task>().ToList<Task>(); listBox.Items.Clear(); foreach (var t in retrievedTasks) { listBox.Items.Add(t); }



    28 июля 2014 г. 15:22
  • Окей.

    Как бы Вы тогда написали вытаскивание 1го айтема по известному Id?

    28 июля 2014 г. 15:45
  • Допустим можно сделать вот так:

    Task tsk =null;
    forech (var t in task)
    {
       if (v.id == 1)
       {
          break;
       }
    }
    
    return tsk;
    

    29 июля 2014 г. 14:24
  • Допустим можно сделать вот так:

    Task tsk =null;
    forech (var t in task)
    {
       if (v.id == 1)
       {
          break;
       }
    }
    
    return tsk;

    Можно и так. Это Вы сделали аналог FirstOrDefault(a=>a.id == 1);

    Теперь, когда Вы вытащили объект, можете послать его на удаление.

    Task tsk =null; foreach (var t in task) { if (v.id == 1) { break; } }

    if(tsk != null)

    {

    dbConn.Delete(tsk);

    }

    Или попробовать это записать так:

    var item = db.Table<Task>().FirstOrDefault(a=>a.Id == 1);
    if(item != null)
    {
        dbConn.Delete(item);
    }


    • Изменено Oleg Kurzov 29 июля 2014 г. 14:40
    29 июля 2014 г. 14:39
  • Последний вариант это как я понимаю лямбда выражение?
    29 июля 2014 г. 14:53
  • Да.

    29 июля 2014 г. 17:44
  • А как сделать удаление через выбранный item в listbox? Попробовал вот так: 

    var db = new SQLiteConnection(DB_Path); var item = db.Table<Task>().FirstOrDefault(a => a.Text == listBox.SelectedItem); if (item != null) { dbConn.Delete(item); }

    2 августа 2014 г. 15:07
  • Слушайте, я не телепат. Откуда мне знать что у Вас в ListBox лежит и компилируется ли у Вас код выше.
    2 августа 2014 г. 16:51