在UWP的ListView中删除sqlite数据

玫瑰

我有一个listview,其数据是从sqlite数据库中提取的,如下所示:

我要检查用户单击删除按钮,然后删除列表中的数据,并且也删除sqlite数据库中的数据。列表视图图片XAML:

<ListView x:Name="ListTryout" Grid.Row="1" Margin="0,5,0,10" ItemsSource="{Binding Source={StaticResource itemsViewSource}}"  DataContext="{Binding SelectedItem, ElementName=itemListView}" IsItemClickEnabled="True" SelectionChanged="ListTryout_SelectionChanged" Background="{x:Null}" SelectionMode="Single">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="auto"/>
                            </Grid.ColumnDefinitions>

                            <StackPanel Grid.Column="0" Orientation="Vertical">
                                <TextBlock Margin="10,10,0,0" FontSize="20" Text="{Binding Judul}" Style="{StaticResource CaptionTextBlockStyle}" VerticalAlignment="Top" HorizontalAlignment="Left"/>
                                <TextBlock Margin="10,10,0,0" FontSize="17" Text="{Binding JumlahSoal}" VerticalAlignment="Top" HorizontalAlignment="Left" FontWeight="SemiLight"/>
                                <TextBlock Margin="10,10,0,0" FontSize="17" Text="{Binding Durasi}" VerticalAlignment="Top" HorizontalAlignment="Left" FontWeight="SemiLight" Visibility="Collapsed"/>
                                <Line X1="0" X2="1" Stretch="Fill" Margin="10,10,10,0" Stroke="#FF4B4B4B"/>
                            </StackPanel>
                            <AppBarButton x:Name="deleteItemBtn" Grid.Column="1" Margin="0,0,50,0" Icon="Delete" HorizontalAlignment="Right" Click="deleteItemBtn_Click"/>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

码:

private void ReadTryoutList_Loaded(object sender, RoutedEventArgs e)
        {
            ReadAllDBName dbName = new ReadAllDBName();
            DB_TryoutList = dbName.GetAllDBName();
            ListTryout.ItemsSource = DB_TryoutList.OrderByDescending(i => i.ID).ToList();//Binding DB data to LISTBOX and Latest contact ID can Display first.  
            if(DB_TryoutList.Count == 0)
            {
                statuskosongStack.Visibility = Visibility.Visible;
                ListTryout.Visibility = Visibility.Collapsed;
            }
            else
            {
                statuskosongStack.Visibility = Visibility.Collapsed;
                ListTryout.Visibility = Visibility.Visible;
            }
        }
private void deleteItemBtn_Click(object sender, RoutedEventArgs e)
        {
            Db_Helper.DeleteQuiz(currentquiz.ID);
        }

DatabaseHelper类:

public void CreateDatabase(string DB_PATH)
        {
            if (!CheckFileExists(DB_PATH).Result)
            {
                using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), DB_PATH))
                {
                    conn.CreateTable<DBName>();
                }
            }
        }
        private async Task<bool> CheckFileExists(string fileName)
        {
            try
            {
                var store = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
                return true;
            }
            catch
            {
                return false;
            }
        }

        // Insert the new history in the DBName table. 
        public void Insert(DBName dBName)
        {
            using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), App.DB_PATH))
            {
                conn.RunInTransaction(() =>
                {
                    conn.Insert(dBName);
                });

            }
        }

        public DBName ReadName(int quizid)
        {
            using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), App.DB_PATH))
            {
                var existingName = conn.Query<DBName>("select * from DBName where ID =" + quizid).FirstOrDefault();
                return existingName;
            }
        }

        public ObservableCollection<DBName> ReadAllDBName()
        {
            try
            {
                using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), App.DB_PATH))
                {
                    List<DBName> myCollection = conn.Table<DBName>().ToList<DBName>();
                    ObservableCollection<DBName> DBNameList = new ObservableCollection<DBName>(myCollection);
                    return DBNameList;
                }
            }
            catch
            {
                return null;
            }
        }

        public void DeleteQuiz(string ID)
        {
            using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), App.DB_PATH))
            {

                var existingquiz = conn.Query<DBName>("delete from DBName where ID ='" + ID + "'").FirstOrDefault();
                if (existingquiz != null)
                {
                    conn.RunInTransaction(() =>
                    {
                        conn.Delete(existingquiz);
                    });
                }
            }
        }

我试过了,但是不能在listview和sqlite数据库上删除数据。怎么处理呢?

毫米8

将的设置或绑定到ItemsSource,然后ListView从中ObservableCollection<T>删除该项目,例如:

private ObservableCollecton<DBName> _source;
private void ReadTryoutList_Loaded(object sender, RoutedEventArgs e)
{
    ReadAllDBName dbName = new ReadAllDBName();
    DB_TryoutList = dbName.GetAllDBName();
    _source = new ObservableCollecton<DBName>(DB_TryoutList.OrderByDescending(i => i.ID).ToList());
    ListTryout.ItemsSource = _source;
    if (DB_TryoutList.Count == 0)
    {
        statuskosongStack.Visibility = Visibility.Visible;
        ListTryout.Visibility = Visibility.Collapsed;
    }
    else
    {
        statuskosongStack.Visibility = Visibility.Collapsed;
        ListTryout.Visibility = Visibility.Visible;
    }
}

private void deleteItemBtn_Click(object sender, RoutedEventArgs e)
{
    var btn = sender as AppBarButton;
    var item = btn.DataContext as DBName;
    if (item != null)
    {
        _source.Remove(item);
        Db_Helper.DeleteQuiz(currentquiz.ID);
    }
}

我认为GetAllDBName()是返回一个IEnumerable<DBName>和你显示DBNamesListView

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章