مشخصات مقاله
-
610
-
0.0
-
2363
-
0
-
0
|آموزش xamarin|آموزش پايگاه داده در زامارين|
آموزش گريد Grid در Xamarin
قبل از شروع، باید با موفقیت بخش های زیر را به پایان رسانده باشید
- نوشتن اولین برنامه در زامارین
- آموزش Stack Layout در زامارين
- آموزش ساخت ورودي متن در زامارين
- آموزش ساخت Buttom در زامارين
- آموزش ListView در زامارين
در این بخش شما می آموزید چگونه:
- از NuGet Packege Manager برای اضافه کردن SQLite.NET به یک پروژه Xamarin.Forms استفاده کنید.
- کلاس هایی با دسترسی به دیتا بسازید.
- از کلاس هایی جه به دیتا دسترسی دارند استفاده کنید.
شما میتوانید از Visual Studio 2019 ویا Visual Studio for Mac برای تولید یک اپلیکیشن ساده که نشان میدهد چگونه ازدیتا بیس ذخیره شده در local SQLite.Net ، استفاده کنید. اپلیکیشن نهایی به شکل زیر خواهد بود:
گام اول
در Visual Studio
برای کامل کردن این بخش شما باید Visual Studio 2019 (آخرین ورژن ) و Mobile development with .NET را بر سیستم خود نصب کرده باشید. علاوه بر آن آما نیاز به یک سیستم مک متصل شدن به سیستم خود دارید تا بتوانید اپلیکیشن را برای iOS بسازید. برای اطلاعات بیشتر Installing Xamarin را ببینید و برای اطلاعات بیشتر درباره اتصال Visual Studio به Mac، Pair to Mac for Xamarin.iOS development را ببینید.
1. Visual Studio را باز کنید و یک new black Xamarin.Forms app بسازید و آن را LocalDatabaseTutorial نام گذاری کنید. مطمئن شوید که اپ شما از مکانیزم .NET Standard برای shared code استفاده میکند.
برای استفاده از کد ها C# و XAML موجود در این بخش شما باید solution خود را LocalDatabaseTutorial بنامید. استفاده از نام متفاوت باعث میشود شما با کپی کردن کد های موجود در این بخش به error برخورد کنید.
2. در Solution Explorer، پروژه LocalDatabasTutorial را انتخاب کنید و بر آن راست کلیک کنید و Manage NuGetPackeges… را انتخاب کنید:
3. در NuGet Packages Manager ، تب Brows را انتخاب کنید و sqlite-net-pcl جستجو کنید ، آن را انتخاب کرده و سپس Install را بزنید و آن را به پروژه اضافه کنید:
NuGet packages های زیادی با نام های مشابه وجود دارد. پکیج مناسب باید دارای مشخصات زیر باشد:
- Author(s): Frank A. Krueger
- Id: sqlite-net-pcl
- NuGet link: sqlite-net-plc
این پکیج برای ترکیب عملیات دیتابیس با اپلیکیشن، استفاده میشود.
4. Solution را build کنید تا از نبود error مطمئن شوید.
در Visual Studio for Mac
برای کامل کردن این tutorial شما باید Visual Studio for Mac(آخرین ورژن) به همراه support platform برای Android و iOS را نصب کرده باشید. علاوه بر آن، شما نیاز باید Xcode(آخرین ورژن) را نیز نصب کنید. برای اطلاعات بیشتر درباره نصب پلتفرم Xamarin، Installing Xamarin را ببینید.
1. Visual Studio for Mac را باز کنید و یک new black Xamarin.Forms app بسازید و آن را LocalDatabasTutorial نام گذاری کنید. مطمئن شوید که اپ شما از مکانیزم .NET Standard برای shared code استفاده میکند.
برای استفاده از کد ها C# و XAML موجود در این بخش شما باید solution خود را LocalDatabasTutorial بنامید. استفاده از نام متفاوت باعث میشود شما با کپی کردن کد های موجود در این بخش به error برخورد کنید.
2. در Solution Pad، LocalDatabasTutorial را انتخاب کنید و بر آن راست کلیک کنید و به Add> Add NuGet Packages بروید:
3. در پنجره Add Packages، sqlite-net-pcl را جستجو کنید، آن را انتخاب کنید و سپس Add Package را بزنید و آن را به پروژه اضافه کنید:
NuGet packages های زیادی با نام های مشابه وجود دارد. پکیج مناسب باید دارای مشخصات زیر باشد:
- Author(s): Frank A. Krueger
- Id: sqlite-net-pcl
- NuGet link: sqlite-net-plc
این پکیج برای ترکیب عملیات دیتابیس با اپلیکیشن، استفاده میشود.
4. Solution را build کنید تا از نبود error مطمئن شوید.
گام دوم
در این بخش شما دسترسی به دیتا را به کلاس های پروژه LocalDatabaseTutorial اضافه میکنید، که برای حفظ دیتا درباره افراد در دیتابیس، استفاده میشود.
در Visual Studio
1. در Solution Explorer، یک کلاس جدید به نام Person در پروژه باز کنید و سپس در Person.cs تمام کد های موجود را حذف کنید و کد زیر را جایگزین کنید:
using SQLite;
namespace LocalDatabaseTutorial
{
public class Person
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
}
این کد کلاس Person را تعریف میکند که دیتا هر فرد را در اپلیکیشن ذخیره میکند. صفت ID به عنوان PrimeryKey و AutoIncrement مشخص شده است تا هر فرد دارای یک ID منحصر به فرد در SQLite.NET باشد.
2. در Solution Explorer، در پروژه LocalDatabaseTutorial ، یک کلاس به نام Database به پروژه اضافه کنید و سپس کد های موجود در Database.cs را حذف کنید و کد زیر را جایگزین کنید:
using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite;
namespace LocalDatabaseTutorial
{
public class Database
{
readonly SQLiteAsyncConnection _database;
public Database(string dbPath)
{
_database = new SQLiteAsyncConnection(dbPath);
_database.CreateTableAsync().Wait();
}
public Task<>> GetPeopleAsync()
{
return _database.Table().ToListAsync();
}
public Task SavePersonAsync(Person person)
{
return _database.InsertAsync(person);
}
}
}
این کلاس شامل کد هایی برای ایجاد دیتابیس، خواندن از آن و نوشته دیتا در آن میباشد. این کد از SQLite.NET API های ناهمگام استفاده میکند تا عملیات دیتابیس را به background thread ها منتقل کند. علاوه بر این Database Constructor آدرس فایل دیتا بیش را به عنوان یک آرگومان دریافت میکند. این آدرس توسط کلاس App در گام بعدی ارائه میشود.
3. در Solution Explorer، در پروژه LocalDatabeseTutorial ، App.xaml را باز کنید و سپس بر App.xaml.cs دوبل کلیک کنید تا باز شود و کد های موجود در آن را حذف کرده و کد زیر را جایگزین کنید:
using System;
using System.IO;
using Xamarin.Forms;
namespace LocalDatabaseTutorial
{
public partial class App : Application
{
static Database database;
public static Database Database
{
get
{
if (database == null)
{
database = new Database(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "people.db3"));
}
return database;
}
}
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}
این کد صفت Database را تعریف میکند که یک instance جدید از Database به عنوان singleton ایجاد میکند. یک آدرس local file و یک filename، که مکان ذخیره دیتا را نشان میدهند، به عنوان آرگومان به Database Constructor داده میشود.
مزیت نمایش دیتا بیس به شکل singleton این است که یک database connection باز میشود و در زمان اجرا اپلیکیشن باز نگه داشته میشود، بنابراین نیازی نیست هر بار که عملیاتی بر دیتا بیس انجام میشود، فایل دیتا بیس را باز و بسته کنیم
4. Solution را build کنید تا از نبود خطا مطمئن شوید.
در Visual Studio for Mac
1. در Solution Pad، یک کلاس جدید به نام Person در پروژه باز کنید و سپس در Person.cs تمام کد های موجود را حذف کنید و کد زیر را جایگزین کنید:
using SQLite;
namespace LocalDatabaseTutorial
{
public class Person
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
}
این کد کلاس Person را تعریف میکند که دیتا هر فرد را در اپلیکیشن ذخیره میکند. صفت ID به عنوان PrimeryKey و AutoIncrement مشخص شده است تا هر فرد دارای یک ID منحصر به فرد در SQLite.NET باشد.
2. در Solution Pad، در پروژه LocalDatabaseTutorial ، یک کلاس به نام Database به پروژه اضافه کنید و سپس کد های موجود در Database.cs را حذف کنید و کد زیر را جایگزین کنید:
using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite;
namespace LocalDatabaseTutorial
{
public class Database
{
readonly SQLiteAsyncConnection _database;
public Database(string dbPath)
{
_database = new SQLiteAsyncConnection(dbPath);
_database.CreateTableAsync().Wait();
}
public Task<>> GetPeopleAsync()
{
return _database.Table().ToListAsync();
}
public Task SavePersonAsync(Person person)
{
return _database.InsertAsync(person);
}
}
}
این کلاس شامل کد هایی برای ایجاد دیتابیس، خواندن از آن و نوشته دیتا در آن میباشد. این کد از SQLite.NET API های ناهمگام استفاده میکند تا عملیات دیتابیس را به background thread ها منتقل کند. علاوه بر این Database Constructor آدرس فایل دیتا بیش را به عنوان یک آرگومان دریافت میکند. این آدرس توسط کلاس App در گام بعدی ارائه میشود.
3. در Solution Pad، در پروژه LocalDatabeseTutorial ، App.xaml را باز کنید و سپس بر App.xaml.cs دابل کلیک کنید تا باز شود و کد های موجود در آن را حذف کرده و کد زیر را جایگزین کنید:
using System;
using System.IO;
using Xamarin.Forms;
namespace LocalDatabaseTutorial
{
public partial class App : Application
{
static Database database;
public static Database Database
{
get
{
if (database == null)
{
database = new Database(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "people.db3"));
}
return database;
}
}
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}
این کد صفت Database را تعریف میکند که یک instance جدید از Database به عنوان singleton ایجاد میکند. یک آدرس local file و یک filename، که مکان ذخیره دیتا را نشان میدهند، به عنوان آرگومان به Database Constructor داده میشود.
مزیت نمایش دیتا بیس به شکل singleton این است که یک database connection باز میشود و در زمان اجرا اپلیکیشن باز نگه داشته میشود، بنابراین نیازی نیست هر بار که عملیاتی بر دیتا بیس انجام میشود، فایل دیتا بیس را باز و بسته کنیم
4. Solution را build کنید تا از نبود خطا مطمئن شوید.
گام سوم
در این بخش شما یک UI، برای کلاس های دسترسی به دیتا بیس که قبلا ایجاد شده است، ایجاد میکنید.
در Visual Studio
1. در Solution Explorer، در پروژه LocalDatabaseTutorial، بر MainPage.xaml دابل کلیک کنید تا باز شود و سپس کد های موجود در آن را حذف کنید و کد زیر را جایگزین کنید:
این کد UI صفحه را تعریف میکند که شامل دو Entry، یک Button و یک ListView میباشد که در StackLayout هستند. هر Entry، دارای صفتPlaceholder میباشد که نشان دهنده متن داخل Entry پیش وارد کردن متن توسط کاربر است. همچنین event handler به نام OnButtonClicked برای فشرده (Clicked) شدن Button وجود دارد که در گام بعد کامل میشود. صفت ItemTemplate برای ListView ، DataTemplate قرار داده شده است که از TextCell برای تعریف ظاهر هر ردیف در ListView استفاده میکند. دیتا TextCell، صفات Text و Detail خود را به ترتیب با صفات Name و Age از شی Person، Bind میکند.
علاوه براین، Entry و ListView دارای نام هایی هستند که با صفت x:Name مشخص میشود و فایل Code-behind میتواند با نام این اشیا به آنها دسترسی داشته باشد.
2. در Solution Explorer، در پروژه LocalDatabaseTutorial، MainPage.xaml را باز کنید و بر MainPage.xaml.cs دابل کلیک کنید را باز شود، سپس به این کلاس OnAppearing override و OnButtonClicked event handler را اضافه کنید:
protected override async void OnAppearing()
{
base.OnAppearing();
listView.ItemsSource = await App.Database.GetPeopleAsync();
}
async void OnButtonClicked(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(nameEntry.Text) && !string.IsNullOrWhiteSpace(ageEntry.Text))
{
await App.Database.SavePersonAsync(new Person
{
Name = nameEntry.Text,
Age = int.Parse(ageEntry.Text)
});
nameEntry.Text = ageEntry.Text = string.Empty;
listView.ItemsSource = await App.Database.GetPeopleAsync();
}
}
متد OnAppearing، ListView را ، از هر دیتایی که در دیتابیس ذخیره شده باشد، پر میکند. متد OnButton Clicked، که در زمان ضربه زدن به Button اجرا میشود، دیتا وارد شده در هر دو Entry را ، پیش از پاک کردن، در دیتابیس ذخیره میکند و دیتا موجود در ListView را refresh میکند.
متد OnApprearing override پس از نمایش ContentPage ، درست پیش از آنکه دیده شود، اجرا میشود. بنابراین مکان مناسبی برای قرار دادن محتوا Xamarin.Forms view ها میباشد.
3. در Visual Studio toolbar، دکمه start را (که علامتی مثلثی شبیه علامت play دارد) بزنید تا اپلیکیشن در شبیه ساز انتخابی شما اجرا شود.
چند داده وارد کنید، بر Button ضربه بزنید تا داده ها در دیتابیس ذخیره شودن و ListView را با دیتا جدید پر کنند:
در Visual Studio for Mac
1. در Solution Pad، در پروژه LocalDatabaseTutorial، بر MainPage.xaml دابل کلیک کنید تا باز شود و سپس کد های موجود در آن را حذف کنید و کد زیر را جایگزین کنید:
این کد UI صفحه را تعریف میکند که شامل دو Entry، یک Button و یک ListView میباشد که در StackLayout هستند. هر Entry، دارای صفتPlaceholder میباشد که نشان دهنده متن داخل Entry پیش وارد کردن متن توسط کاربر است. همچنین event handler به نام OnButtonClicked برای فشرده (Clicked) شدن Button وجود دارد که در گام بعد کامل میشود. صفت ItemTemplate برای ListView ، DataTemplate قرار داده شده است که از TextCell برای تعریف ظاهر هر ردیف در ListView استفاده میکند. دیتا TextCell، صفات Text و Detail خود را به ترتیب با صفات Name و Age از شی Person، Bind میکند.
علاوه براین، Entry و ListView دارای نام هایی هستند که با صفت x:Name مشخص میشود و فایل Code-behind میتواند با نام این اشیا به آنها دسترسی داشته باشد.
2. در Solution Pad، در پروژه LocalDatabaseTutorial، MainPage.xaml را باز کنید و بر MainPage.xaml.cs دابل کلیک کنید را باز شود، سپس به این کلاس OnAppearing override و OnButtonClicked event handler را اضافه کنید:
protected override async void OnAppearing()
{
base.OnAppearing();
listView.ItemsSource = await App.Database.GetPeopleAsync();
}
async void OnButtonClicked(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(nameEntry.Text) && !string.IsNullOrWhiteSpace(ageEntry.Text))
{
await App.Database.SavePersonAsync(new Person
{
Name = nameEntry.Text,
Age = int.Parse(ageEntry.Text)
});
nameEntry.Text = ageEntry.Text = string.Empty;
listView.ItemsSource = await App.Database.GetPeopleAsync();
}
}
متد OnAppearing، ListView را ، از هر دیتایی که در دیتابیس ذخیره شده باشد، پر میکند. متد OnButton Clicked، که در زمان ضربه زدن به Button اجرا میشود، دیتا وارد شده در هر دو Entry را ، پیش از پاک کردن، در دیتابیس ذخیره میکند و دیتا موجود در ListView را refresh میکند.
متد OnApprearing override پس از نمایش ContentPage ، درست پیش از آنکه دیده شود، اجرا میشود. بنابراین مکان مناسبی برای قرار دادن محتوا Xamarin.Forms view ها میباشد.
3. در Visual Studio for Mac toolbar، دکمه start را (که علامتی مثلثی شبیه علامت play دارد) بزنید تا اپلیکیشن در شبیه ساز انتخابی شما اجرا شود.
چند داده وارد کنید، بر Button ضربه بزنید تا داده ها در دیتابیس ذخیره شودن و ListView را با دیتا جدید پر کنند:
گام چهارم
تبريك
شما با موفقیت این بخش را به اتمام رساندید و آموختید:
- از NuGet Packege Manager برای اضافه کردن SQLite.NET به یک پروژه Xamarin.Forms استفاده کنید.
- کلاس هایی با دسترسی به دیتا بسازید.
- از کلاس هایی جه به دیتا دسترسی دارند استفاده کنید.