Xamarin SQLite Select - PullRequest
       5

Xamarin SQLite Select

0 голосов
/ 30 октября 2019

У меня есть одна проблема с выбором из локальной базы данных на устройстве Android версии 7.0. Когда я выбираю, он возвращает System.Collections.Generic.List`1[Projectname.Database]

Действительно не знаю, где проблема, мне просто нужно получить значение в строке этого. Спасибо за чью-либо помощь. Код:

barcode.TextChanged += delegate
        {             
            string bcode = ((EditText)barcode).Text.ToString();
            if(bcode != "")
            {
                string kod = bcode.Substring(bcode.IndexOf("Data:") + 5);

                try
                {                      
                    Console.WriteLine("**COUNT = " + db.Query<Prijem>("SELECT Count FROM Prijem WHERE BCode = ?", kod));
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }

                db.Query<Prijem>("INSERT INTO Prijem(BCode,Name,FirmName,ItemCode,Count) values(" + kod + ", 'Test11', 'FirmText', 'XDD286', '2')");
                ((EditText)barcode).Text = "";
                dataGrid.View.Refresh();
            }
        };

Стартер базы данных:

public class Prijem
{
    [PrimaryKey, AutoIncrement]
    public string BCode { get; set; }
    public string Name { get; set; }
    public string FirmName { get; set; }
    public string ItemCode { get; set; }
    public string Count { get; set; }
}
public class GridDB
{
    static object locker = new object();
    SQLiteConnection db;
    public GridDB()
    {
        var dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "ISQLite.db");
        db = new SQLiteConnection(dbPath);

        db.CreateTable<Prijem>();
    }

    public IEnumerable<Prijem> GetItems()
    {
        lock (locker)
        {
            var table = (from i in db.Table<Prijem>() select i);
            return table;
        }
    }
}

1 Ответ

1 голос
/ 31 октября 2019

Я написал вам демо о sqlite в формах xamarin. Здесь работает GIF. enter image description here

Прежде всего, вы должны изменить тип первичного ключа, вы должны изменить его со строкового на int, как показано ниже Prijem

   public class Prijem
{
    [PrimaryKey, AutoIncrement, Unique]
    public int BCode { get; set; }
    public string Name { get; set; }
    public string FirmName { get; set; }
    public string ItemCode { get; set; }
    public string Count { get; set; }
}

Затем, вот операция для класса CRUD.

   public  class PrijemDatabase
{
    readonly SQLiteAsyncConnection _database;

    public PrijemDatabase(string dbPath)
    {
        _database = new SQLiteAsyncConnection(dbPath);
        _database.CreateTableAsync<Prijem>().Wait();
    }

    public Task<List<Prijem>> GetAllPrijemAsync()
    {
        return _database.Table<Prijem>().ToListAsync();
    }

    public Task<Prijem> GetPrijemByNameAsync(string Name)
    {
        return _database.Table<Prijem>()
                        .Where(i => i.Name == Name)
                        .FirstOrDefaultAsync();
    }

    public Task<int> SavePrijemAsync(Prijem prijem)
    {
        if (prijem.BCode != 0)
        {
            return _database.UpdateAsync(prijem);
        }
        else
        {
            return _database.InsertAsync(prijem);
        }
    }

    public Task<int> DeletePrijemAsync(Prijem note)
    {
        return _database.DeleteAsync(note);
    }
}

Вот код App.xaml.cs.

 public partial class App : Application
{

    static PrijemDatabase pdatabase;

    public static PrijemDatabase Pdatabase
    {
        get
        {
            if (pdatabase == null)
            {
                pdatabase = new PrijemDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Prijem2.db3"));
            }
            return pdatabase;
        }
    }




    public App()
    {
        InitializeComponent();
        MainPage = new NavigationPage(new PrijemPage());
    }
 }

Здесь PrijemPage.xaml

       <ListView x:Name="listView"
          Margin="20"
           ItemSelected="ListView_ItemSelected"
          >
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout>
                        <Label Text="{Binding Name}"></Label>

                        <Label Text="{Binding FirmName}"></Label>
                        <Label Text="{Binding ItemCode}"></Label>

                        <Label Text="{Binding Count}"></Label>
                    </StackLayout>

                </ViewCell>


            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Вот PrijemPage.xaml.cs

  public partial class PrijemPage : ContentPage
{
    public PrijemPage()
    {
        InitializeComponent();
        InsertData();

    }

    private async void InsertData()
    {

        List<Prijem> PrijemLIST = new List<Prijem>();
        PrijemLIST.Add(new Prijem() { Name = "Leon", FirmName = "11Fame", ItemCode = "NE", Count = "11" });
        PrijemLIST.Add(new Prijem() { Name = "Jame", FirmName = "22Fame", ItemCode = "Daw", Count = "12" });
        PrijemLIST.Add(new Prijem() { Name = "Leborn", FirmName = "33Fame", ItemCode = "Caow", Count = "13" });
        PrijemLIST.Add(new Prijem() { Name = "Rebeeca", FirmName = "44fame", ItemCode = "DacNow", Count = "14" });

        //Insert data
        foreach (var item in PrijemLIST)
        {
            await App.Pdatabase.SavePrijemAsync(item);
        }

        //GetAllData
        listView.ItemsSource = await App.Pdatabase.GetAllPrijemAsync();
    }


    private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var myPrijem = (Prijem)e.SelectedItem;
        Navigation.PushAsync(new Page1(myPrijem));
    }
}

Вот Page1.xaml

    <StackLayout>
        <Label x:Name="MyLabel"
            VerticalOptions="CenterAndExpand" 
            HorizontalOptions="CenterAndExpand" />
    </StackLayout>

Вот Page1.xaml.cs

  public partial class Page1 : ContentPage
{
    public Page1 (Prijem myPrijem)
    {
        InitializeComponent ();

        GetResult(myPrijem);




    }

    private async void GetResult(Prijem myPrijem)
    {
        // Operate a query

        Prijem  prijem= await  App.Pdatabase.GetPrijemByNameAsync(myPrijem.Name);

        MyLabel.Text= "BCode: "+prijem.BCode+ "  Name: "+ myPrijem.Name + "   ItemCode: " + prijem.ItemCode ;
    }
}

Я обновляю свое демо. Вы можете сослаться на это. https://github.com/851265601/prijemDemo

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