Как удалить данные из базы данных SQLite в Xamarin - PullRequest
1 голос
/ 27 января 2020

Это мой DisplayData.xaml:


   <ContentPage.Content>
        <StackLayout>
            <ListView x:Name="RecordList"
                      ItemSelected="OnItemSelected">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout Orientation="Horizontal" 
                                         HorizontalOptions="FillAndExpand"
                                         Margin="20, 10, 20, 0" >
                                <Label Text="{Binding Text}" 
                                       HorizontalOptions="StartAndExpand" 
                                       TextColor="WhiteSmoke"/>                                                                                                           
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <Entry x:Name="TextEntry"
                   Placeholder="hehe"
                   IsVisible="False"/>
            <Entry x:Name="IDEntry"
                   Placeholder="hehe"
                   IsVisible="False"/>
        </StackLayout>
    </ContentPage.Content>

Это мой DisplayData.xaml.cs:


    public partial class DisplayData : ContentPage
    {
        string _dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "myDatabase.db3");
        SpeechRecTable _speech = new SpeechRecTable();

        public DisplayData()
        {
            InitializeComponent();           
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
            var db = new SQLiteConnection(_dbPath);
            RecordList.ItemsSource = db.Table<SpeechRecTable>().OrderBy(x => x.Text).ToList();
        }

        private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            _speech = (SpeechRecTable)e.SelectedItem;
            TextEntry.Text = _speech.Text;
            IDEntry.Text = _speech.Id.ToString();

            Device.BeginInvokeOnMainThread(async () =>
            {
                await Navigation.PushAsync(new RecordContent(TextEntry.Text, IDEntry.Text));
            });            
        }
    }

Когда выбран элемент списка, он выглядит так на моем RecordContent .xaml:

enter image description here

Когда я нажимаю кнопку удаления, эта запись не удаляется, этот код для удаления:


        private async void BtnDelete_Clicked(object sender, EventArgs e)
        {
            var db = new SQLiteConnection(_dbPath);            
            db.Table<SpeechRecTable>().Delete(x => x.Id == _speech.Id);
            await Navigation.PopAsync();            
        }

даже если я использую:


db.Delete<SpeechRecTable>(Id);  


вместо:


db.Table<SpeechRecTable>().Delete(x => x.Id == _speech.Id);

Элемент по-прежнему не будет удален, и большинство учебных пособий, с которыми я столкнулся или руководств, имеют только одна страница просмотра с кнопкой добавления, удаления и обновления. Я пытаюсь отделить кнопку удаления и обновления, моя кнопка обновления работает просто отлично, но удаление не работает, она просто сразу выполняет это: await Navigation.PopAsyn c (); и тогда ничего не происходит.

1 Ответ

0 голосов
/ 28 января 2020

Я уже решил свою проблему, используя это:


         private void BtnDelete_Clicked(object sender, EventArgs e)
         {
            Device.BeginInvokeOnMainThread(async () =>
            {
                var result = await this.DisplayAlert("Delete Item", "Are you sure that you want to DELETE this record?", "Yes", "No");

                if (result)
                {
                    var db = new SQLiteConnection(_dbPath);
                    _speech.Id = Convert.ToInt32(DataIdEntry.Text);
                    db.Table<SpeechRecTable>().Delete(x => x.Id == _speech.Id);
                    await Navigation.PopAsync();
                }

                else
                {

                }
            });                      
        }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...