Infoway
Solutions
CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT
CHƯƠNG VII:
LÀM VIC VI D LIU TRONG SILVERLIGHT
1 Các ng ngh để truy cp d liu trong Silverlight
Trong các ng dụng trên nn tảng Silverlight 2 có cho phép truy cập dữ liệu theo nhiều công nghệ hay
phương thức khác nhau. Cách đơn giản nhất để hiển thị và tương tác người dùng là Data Binding.
Cách khác nữa đ truy cập dữ liệu từ ứng dụng máy khách, nhưmột sự thay thế tối ưu của cookie,
chúng ta có th sử dụng công nghệ Isolated Storage. Silverlight cũng cho phép đọc và ghi trên dliệu
XM L bằng cách sử dụng XmlReader hoặc LINQ to XM L . Ngoài ra cách phổ biến trong các ứng dụng
hiện nay thường làm đó là truy cập dữ liu SQL Server thông qua các công nghệ W eb service, WCF
ADO.Net Data Service.
Trong chương này chúng ta sẽ tìm hiểu một số công nghệ để truy cập dữ liệu sau:
- Data Binding
- Isolated Storage
- Xử lý dữ liệu XML với LINQ to XML
- Truy cập cơ sở d liệu SQL Server với Web Service(WCF)
2 S dng Data Binding
Data Binding cung cp mt cách đơn giảm cho ng dng nn tng silverlight truy cp và
tương tác tới d liệu. Thông thường Data Binding qun lý d liu theo lung giữa ngưi dùng
và các đối tượng d liu. Tc kà khi một binding được to và d liệu có thay đổi, thì giao din
người dùng cũng được trình bày và thay đổi theo d liu(t động ánh x ). Tương tự khi
người dùng thay đổi trên giao din thì nó cũng có thể làm thay đổi đối tượng d liu. Ví d
như khi ngưi dùng thay đổi giá tr trên mt TextBox, giá tr d liu cũng tự động cp nht
theo thay đổi đó.
o S liên kết gia giao din người dùng và d liu
- Binding Object: Như là mt xúc tác giaBindingTarget và Binding Source
- Binding Source: Cha các thuc tính d liu, còn có th là đối tượng ca CLR
Infoway
Solutions
CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT
2
- Binding Target: Là các thuc tính giao diu người dùng đ có th hin th hoc thay
đổi ti d liu. Binding target có th là DependencyProperty ca FramworkElement
- Value Converter: Thành phn tùy chn để áp dng cho những trường hp d liu
cn phânch hoc chuyển đổi
- Điều hướng ca lung d liu: Quyết định ti việc tương tác dữ liu qua li gia
Binding Source và Binding Target (xem chi tiết mục dưới)
Ví d dưới đây sẽ ch rõ cách trình bày thuc tính màu ca ch (ForeGround Color) ca mt
TextBox:
Mã XAML:
<TextBox x:Name="MyTextBox" Text="Text" Foreground="{Binding Brush1,
Mode=OneWay}"/>
M ã C# :
//To mt lớp MyColors đã thc thi giao tiếp INotifyPropertyChanged.
MyColors textcolor = new MyColors();
// Brush1 thiết lp mt SolidColorBrush vi giá tr màu Red.
textcolor.Brush1 = new SolidColorBrush(Colors.Red);
// Thiết lp DataContext ca MyTextBox.
MyTextBox.DataContext = textcolor;
Khi s dng DataContext trong mã C# trên đây, nó cho phép các th UI tha kế thông tin v
d liu ngun. Ví d giống như trong ASP.NET bạn s dụng phương thước gán DataSouce
để hin th d liu trên mt Grid.
o c phương thc điều hướng ca lung d liu
Mi mt kiểu binding data đều có một phương thức điều hướng lung d liu(M ode propery). Cái này
quyểt đnh khi nào làm thế nào để d liu chy tràn. Có 3 phương thức điều hướng lung d liu
sau
- OneTime: binding d liu ti target (giao diện ngưing) mt lần và sau đó kết thúc kết
ni không binding na. Phương thức này phù hp khi hin th d liu mà ít khi hoc không
bao gi cn thay đổi.
- OneWay: Binding d liu ti target gi nó đến khi Source (ngun d liu) thay đổi thì
target cũng thay đi theo. Phương thức này phù hp khi trình bày d liệu mà người dùng
không được phép thay đi
- TwoWay: Binding d liu ti target gi nó đến khi source thay đổi thì target cũng thay
đổi theo, nhưng khi target thay đổi thì source cũng thay đổi theo. Phương thức này phù
hp khi trình bày d liệu mà cho phép người dùng thay đổi d liu ngun
o Change Notification
Để cho hp l với các thay đi giá tr gia Source object và Target objects thì chúng ta phi thc thi
mt interface là InotifyPropertyChanged. Trong InotifyPropertyChanged có cung cp mt event
PropertyChanged.
Trong ví d dưới đây. Class MyColors thực thi giao tiếp InotifyPropertyChanged cho phương thức
OneWay
namespace DataBinding
{
//Tao mot class thua ke interface INotifyPropertyChanged
Infoway
Solutions
CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT
3
public class MyColors : INotifyPropertyChanged
{
private SolidColorBrush _Brush1;
// Khai bao su kien PropertyChanged.
public event PropertyChangedEventHandler PropertyChanged;
//Tao thuoc tinh cua SolidColorBrush
public SolidColorBrush Brush1
{
get { return _Brush1; }
set
{
_Brush1 = value;
// Goi NotifyPropertyChanged khi thuoc tinh nguon duoc cap nhap
NotifyPropertyChanged("Brush1");
}
}
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
3 S dng Isolated Storage
Silverlight dùng Isolated Storage như một h thng file ảo để u trữ d liu trong mt thư mục n
trên máy tính ca bn. chia d liuo làm 2 phân riêng bit: Phn th nht cha các thông tin
qun lý như dung lượng cho phép và phn th 2 cha d liu thc s. M i ng dng Silverlight được
pn b mtng riêng trong h thống lưu trữ này vi dung lượng lưu trữ mc nhiên là 1 M B.
o Ưu điểm:
- Isolated Storage là mt thay thế tuyt vi cho cookie, đặc bit là nếu bạn đang làm vic vi
mt tp ln d liu. M t sd v kh năng của Isolated Storage bao gm undo li mt s
thao tác ca ng dng, hay gi hàng, các cài đặt v ca s hay bt k cài đặt nào mà bn
mun truy cp vào ln np tiếp theo.
- Isolated Storage lưu trữ theo người dùng cho phép các ng dụng lưu gi các cài đặt cho
từng người dùng riêng bit.
o Mt s vấn đ có th xy ra:
- Người qun tr có th đt gii hạn đĩa trên mỗi ni dùng assembly, không có bt k
cnh báo nào v không gian trng còn li. lý do này, bn nên kim tra và bt các ngoi l
trong ng dng ca bn.
- rằng Isolated Storage được đt trong một thư mục n trong h thống, nhưng không
nghĩa người dùng không th tìm ra thư mục này, do vy Isolated Storage không hoàn toàn
an toàn và người dùng có th thay đổi hoca các file. Tuy nhiên, nếu mun người dùng
không th thay đi các file, bn có th dùng các lp mã hóa để mã lại các file này trước khi
lưu.
Infoway
Solutions
CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT
4
- Các máy tính có th b khóa bi các chính sách bo mt và các ng dng s không th lưu
được vào IsolatedStorage. C th hơn, bạn cần có IsolatedStorageFilePermission để có th
làm vic được vi IsolatedStorage
Gi hãy xem qua ví d v việc lưu và đọc d liu t IsolatedStorage. Nh rng bn cn dùng using đ
tham chiếu đến namespace System.IO.IsolatedStorage cũng như là System.IO.
Infoway
Solutions
CHƯƠNG VII: LÀM VIỆC VỚI DỮ LIỆU TRONG SILVERLIGHT
5
using System.Windows.Controls;
using System.IO.IsolatedStorage;
using System.IO;
using System;
namespace Samples_Chap7
{
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
//Luu du lieu vao file dulieu.txt
SaveData("Day la du lieu cua toi", "dulieu.txt");
//Lay du lieu tu file dulieu.txt
string test = LoadData("dulieu.txt");
}
private void SaveData(string data, string fileName)
{
//Lay Isolated Storage cua nguoi dung danh cho ung dung
using (IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isfs = new
IsolatedStorageFileStream(fileName, FileMode.Create, isf))
{
using (StreamWriter sw = new StreamWriter(isfs))
{
//Luu du lieu
sw.Write(data);
sw.Close();
}
}
}
}
private string LoadData(string fileName)
{
string data = String.Empty;
//Lay Isolated Storage cua nguoi dung danh cho ung dung
using (IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isfs = new
IsolatedStorageFileStream(fileName, FileMode.Open, isf))
{
using (StreamReader sr = new StreamReader(isfs))
{
string lineOfData = String.Empty;
while ((lineOfData = sr.ReadLine()) != null)
//Doc du lieu
data += lineOfData;
}
}
}
return data;
}
}