1. Trang chủ
  2. » Công Nghệ Thông Tin

Tuan13 c net databinding

15 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Data Binding
Trường học University of Information Technology
Chuyên ngành C#.NET Programming
Thể loại Bài tập lớn
Năm xuất bản 2018
Thành phố Ho Chi Minh City
Định dạng
Số trang 15
Dung lượng 668,43 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lập trình Windows 11/28/2018 1 C# NET Kỹ thuật xây dựng ứng dụng quản lý Lập trình Ứng dụng quản lý Nội dung  Data Binding 11/28/2018 2 Nội dung  Data Binding Cơ bản Data Binding  Phần lớn các ứng[.]

Trang 1

Kỹ thuật xây dựng ứng dụng quản lý

Lập trình Ứng dụng quản lý

Nội dung

Trang 2

Nội dung

Data Binding

Cơ bản Data Binding

người dùng cách thức hiệu quả để làm việc với

dữ liệu Các dữ liệu mà người dùng sử dụng nằm

ở rất nhiều kho dữ liệu, thông dụng là các

thuật tương đương để trình bày dữ liệu như

ADO.NET, native data access APIs, custom

tác với các nguồn dữ liệu này để đọc dữ liệu,

hiển thị nó, cung cấp cách thức để chỉnh sửa và

Trang 3

 Với rất nhiều data store và các data access API,

truy cập khác nhau một cách duy nhất và nhất

quán

hiệu quả với mục đích duy nhất là đơn giản hóa

việc tích hợp các ứng dụng Winform với dữ liệu

Công nghệ này được gọi là Data Binding.

bởi data binding engine.

Mô hình

Trang 4

Minh họa

class RaceCarDriver

{

string _name;

int _wins;

public string Name

{

get => _name; set => _name = value;

}

public int Wins

{

get => _wins; set => _wins = value;

}

}

public partial class frmRaceCar : Form

{

RaceCarDriver raceCarDriver = new RaceCarDriver {

Name = "M Schumacher" , Wins = 500 };

public frmRaceCar()

{

InitializeComponent();

txtName.Text = raceCarDriver.Name;

txtWins.Text = raceCarDriver.Wins.ToString();

}

}

Trang 5

 Cập nhật dữ liệu khi sửa đổi trên form

txtName.TextChanged += TxtName_TextChanged;

txtWins.TextChanged += TxtWins_TextChanged;

private void TxtName_TextChanged(object sender, EventArgs e)

{

raceCarDriver.Name = txtName.Text;

}

private void TxtWins_TextChanged(object sender, EventArgs e)

{

raceCarDriver.Wins = int.Parse(txtWins.Text);

}

động của thành phần hiển thị hiện tại?

btnAddWin.Click += BtnAddWin_Click;

private void BtnAddWin_Click(object sender, EventArgs e)

{

raceCarDriver.Wins++;

// cập nhật hiển thị

txtWins.Text = raceCarDriver.Wins.ToString();

}

Trang 6

INotifyPropertyChanged chỉ có duy nhất một

thành viên là event mang tên PropertyChanged.

class RaceCarDriver : INotifyPropertyChanged

{

public event PropertyChangedEventHandler PropertyChanged;

string _name;

int _wins;

public string Name

{

get => _name;

set {

_name = value;

OnPropertyChanged( "Name" );

}

}

……

void OnPropertyChanged( string propertyName)

{

PropertyChanged?.Invoke( this ,

new PropertyChangedEventArgs(propertyName));

}

}

raceCarDriver.PropertyChanged += RaceCarDriver_PropertyChanged;

private void RaceCarDriver_PropertyChanged( object sender,

PropertyChangedEventArgs e)

{

switch (e.PropertyName)

{

case "Name" :

txtName.Text = raceCarDriver.Name;

break ;

case "Wins" :

txtWins.Text = raceCarDriver.Wins.ToString();

break ;

}

Trang 7

Quy trình xử lý

Trang 8

Winform Data Binding

buộc (bind) theo cách này và được giữ đồng bộ

với public property của bất kỳ object nào.

INotifyPropertyChanged.PropertyChanged và

nếu public property là read-write

var nameBinding = new Binding( "Text" , raceCarDriver,

"Name" , true);

txtName.DataBindings.Add(nameBinding);

var winsBinding = new Binding( "Text" , raceCarDriver,

"Wins" , true);

txtWins.DataBindings.Add(winsBinding);

List Data Source

IList<RaceCarDriver> raceCarDrivers = new

List<RaceCarDriver> {

new RaceCarDriver{ Name = "M Schumacher" , Wins = 500 },

new RaceCarDriver{ Name = "A Senna" , Wins = 700 },

new RaceCarDriver{ Name = "A Prost" , Wins = 320 },

};

txtName.DataBindings.Add( "Text" , raceCarDrivers, "Name" );

txtWins.DataBindings.Add( "Text" , raceCarDrivers, "Wins" );

Trang 9

BindingManagerBase BindingManager

{

get { return BindingContext[raceCarDrivers]; }

}

private void BtnPrev_Click( object sender, EventArgs e)

{

BindingManager.Position ;

}

private void BtnNext_Click( object sender, EventArgs e)

{

BindingManager.Position++;

}

private void BtnLast_Click( object sender, EventArgs e)

{

BindingManager.Position = BindingManager.Count - 1;

}

private void BtnFirst_Click( object sender, EventArgs e)

{

BindingManager.Position = 0;

}

Trang 10

Complex Binding

1 list data source

dgv.DataSource = raceCarDrivers;

private void BtnAdd_Click( object sender, EventArgs e)

{

raceCarDrivers.Add( new RaceCarDriver {

Name = "Nelson Piquet" , Wins = 300

});

}

private void BtnDel_Click( object sender, EventArgs e)

{

raceCarDrivers.Remove((RaceCarDriver)BindingManager.Current);

}

Trang 11

Chức năng cần có của binding list data source

bao gồm tất cả các yếu tố sau

 Hỗ trợ cho cả 2 mô hình simplecomplex binding

 Khả năng thêm, cập nhật và xóa các itemtrên cả

control hiển thị được ràng buộc và list data source

 Việc đưa ra các thông báo thay đổi danh sách và

các itemtrong danh sách

IBindingList

IBindingList

IBindingList là mở rộng của IList với chức năng

các control bị ràng buộc có thể gắn kết vào event

ListChangedđể xử lý khi các item được thêm

vào, cập nhật hoặc xoá và do đó giữ dữ liệu

được hiển thị đồng bộ với nguồn dữ liệu danh

sách

BindingList<T>classtriển khai IBindingList

Trang 12

1 generic implementation của IBindingList

BindingList<RaceCarDriver> raceCarDrivers = new

BindingList<RaceCarDriver> {

new RaceCarDriver{ Name = "M Schumacher" , Wins = 500 },

new RaceCarDriver{ Name = "A Senna" , Wins = 700 },

new RaceCarDriver{ Name = "A Prost" , Wins = 320 },

};

private void BtnAddWin_Click(object sender, EventArgs e)

{

int iCurrent = BindingManager.Position;

raceCarDrivers[iCurrent].Wins++;

}

Trang 13

IBindingList

BindingSource raceCarDriverBS = new BindingSource();

raceCarDriverBS.DataSource = raceCarDrivers;

dgv.DataSource = raceCarDriverBS;

txtName.DataBindings.Add( "Text" , raceCarDriverBS, "Name" );

txtWins.DataBindings.Add( "Text" , raceCarDriverBS, "Wins" );

BindingManagerBase BindingManager

{

//get { return BindingContext[raceCarDrivers]; }

get { return BindingContext[raceCarDriverBS]; }

}

Formatting bound data

var winsBinding = new Binding( "Text" , raceCarDriverBS,

"Wins" );

winsBinding.Format += WinsBinding_Format;

winsBinding.Parse += WinsBinding_Parse;

txtWins.DataBindings.Add(winsBinding);

Trang 14

private void WinsBinding_Format( object sender, ConvertEventArgs e)

{

if (e.DesiredType == typeof ( string ))

{

var wins = ( int )e.Value;

e.Value = string Format( "finished {0} rounds" , wins);

}

}

private void WinsBinding_Parse( object sender, ConvertEventArgs e)

{

if (e.DesiredType == typeof ( int ))

{

var str = e.Value as string ;

str = str.Replace( "finished " , "" );

str = str.Replace( " rounds" , "" );

e.Value = int Parse(str);

}

}

Trang 15

Master-Detail Forms

Bài tập

đơn giản minh họa Master-Detail form [sử dụng

Category và Product] (cho phép duyệt, thêm, xóa,

sửa và có áp dụng data binding)

Ngày đăng: 09/04/2023, 06:29