Я написал вам демо о sqlite в формах xamarin. Здесь работает GIF. ![enter image description here](https://i.stack.imgur.com/zFdiv.gif)
Прежде всего, вы должны изменить тип первичного ключа, вы должны изменить его со строкового на 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