формы xamarin не могут отображать данные sqlite в виде списка - PullRequest
0 голосов
/ 05 сентября 2018

Я изо всех сил пытаюсь найти ответ самостоятельно, используя предыдущие сообщения Stackoverflow, YouTube и поиск в Google. Я пытаюсь узнать, как использовать SQLite с формами xamarin.

Решение соединения:

using SQLite;
namespace TestSQLite
{
    public interface IDatabaseConnection
    {
        SQLiteAsyncConnection GetConnection();
    }
}

Android-соединение (iOS идентично)

using SQLite;
using System.IO;
using TestSQLite; 
using Xamarin.Forms;

[assembly: Dependency(typeof(DatabaseConnection))]

namespace TestSQLite
{
    public class DatabaseConnection : IDatabaseConnection
    {
        public SQLiteAsyncConnection GetConnection() 
        {
            var dbName = "TestDb.db3";
            var path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), dbName);

            return new SQLiteAsyncConnection(path);
        }
    }
}

И код MainPage C #:

using SQLite;
using Xamarin.Forms;

namespace TestSQLite
{
    public class ControlledDrugs
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        public string Drug { get; set; }
        public double Volume { get; set; }
    }
    public class Users
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public partial class MainPage : ContentPage
    {
        private SQLiteAsyncConnection _connection;

        public MainPage()
        {
            InitializeComponent();
            _connection = DependencyService.Get<IDatabaseConnection>().GetConnection();
        }

        protected override async void OnAppearing()
        {
            await _connection.CreateTableAsync<ControlledDrugs>();
            await _connection.CreateTableAsync<Users>();

             RefreshUsers();
        RefreshDrugs();

            base.OnAppearing();
        }
        async void OnAdd(object sender, System.EventArgs e)
        {
    var user = new Users { Name = UserInput.Text };
    await _connection.InsertAsync(user);
        }

        void OnUpdate(object sender, System.EventArgs e)
        {

        }

        void OnDelete(object sender, System.EventArgs e)
        {

        }
 async void RefreshUsers()
    {
        var userlist = await _connection.Table<Users>().ToListAsync();
        Userlistview.ItemsSource = userlist;
    }

    async void RefreshDrugs()
    {
        var druglist = await _connection.Table<ControlledDrugs>().ToListAsync();
        Drugslistview.ItemsSource = druglist;
    }

    private void Userlistview_Refreshing(object sender, System.EventArgs e)
    {
        RefreshUsers();
        Userlistview.EndRefresh();
    }
    }
}

Я знаю, что метод add to sqlite работает, во-первых, потому что мне помог пользователь в Stackoverflow, а во-вторых, в просмотре списка появляется пустая ячейка. Но в этом-то и проблема, ячейки пустые, независимо от того, сколько я добавляю, все пустые. Я не могу получить физический доступ к базе данных sqlite на эмуляторе, чтобы открыть и проверить, записываются ли записи или вводятся как пустые. Похоже, что System.Environment.SpecialFolder.MyDocuments не сохраняет файл .db3 в эмуляторе «Мои документы» - это отдельная проблема, но я не могу найти ответ сам.

Так что я знаю, что проблема заключается либо в: 1) когда решение вводит данные в базу данных (как пустые), либо если 2) ошибка при возврате данных из базы данных для просмотра в виде списка. Кроме того, из моего кода вы, вероятно, можете видеть, что я вызываю обновленный просмотр списка вручную (пользователь тянет просмотр списка, потому что я все еще изучаю, и наблюдаемый метод / подход к сбору немного за мной ATM.

Спасибо команде

ОБНОВЛЕНИЕ: Код Xaml по запросу: Спасибо.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:TestSQLite"
             x:Class="TestSQLite.MainPage">

    <StackLayout>
        <Label Text="User Input"></Label>
        <Entry x:Name="UserInput"></Entry>
        <Button Text="add it" Clicked="OnAdd"></Button>
        <Label Text="User"></Label>
        <ListView x:Name="Userlistview" IsPullToRefreshEnabled="True" Refreshing="Userlistview_Refreshing"></ListView>
        <Label Text="Drugs"></Label>
        <ListView x:Name="Drugslistview"></ListView>
    </StackLayout>

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