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

Tuan05 databinding

15 0 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

Lập trình Windows 9/29/2019 1 Data Binding Lập trình Ứng dụng quản lý Nội dung  Data Binding 9/29/2019 2 Nội dung  Data Binding Cơ bản Data Binding  Phần lớn các ứng dụng Winform cung cấp cho người[.]

9/29/2019 Lập trình Ứng dụng quản lý Data Binding Nội dung  Data Binding 9/29/2019 Nội dung  Data Binding Cơ Data Binding  Phần lớn ứng dụng Winform cung cấp cho người dùng cách thức hiệu để làm việc với liệu Các liệu mà người dùng sử dụng nằm nhiều kho liệu, thông dụng database hệ thống tập tin Có nhiều kỹ thuật tương đương để trình bày liệu ADO.NET, native data access APIs, custom objects chí web service  Chức ứng dụng Winform tương tác với nguồn liệu để đọc liệu, hiển thị nó, cung cấp cách thức để chỉnh sửa ghi thay đổi data store 9/29/2019  Với nhiều data store data access API, Winform đơn giản hóa xử lý với khái niệm data source Sự trừu tượng hóa cho phép Winform xử lý data store công nghệ truy cập khác cách quán  Data source tảng kỹ thuật hiệu với mục đích đơn giản hóa việc tích hợp ứng dụng Winform với liệu Công nghệ gọi Data Binding  Về logic, data binding liên kết object properties với control properties hỗ trợ data binding engine Mơ hình 9/29/2019 Minh họa  Xét đối tượng RaceCarDriver class RaceCarDriver { string _name; int _wins; public string Name { get => _name; set => _name = value; } public int Wins { get => _wins; set => _wins = value; } }  Hiển thị liệu 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(); } } 9/29/2019  Cập nhật liệu sửa đổi 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); }  Thay đổi liệu 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(); }  Nếu tự thân liệu thay đổi không qua tác động thành phần hiển thị tại? 9/29/2019 INotifyPropertyChanged  Thuộc namespace System.ComponentModel, INotifyPropertyChanged có thành viên 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)); } }  Xử lý 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; } } 9/29/2019 Quy trình xử lý 9/29/2019 Winform Data Binding  Binding object var nameBinding = new Binding("Text", raceCarDriver, "Name", true); txtName.DataBindings.Add(nameBinding); var winsBinding = new Binding("Text", raceCarDriver, "Wins", true); txtWins.DataBindings.Add(winsBinding);  Hầu hết control property ràng buộc (bind) theo cách giữ đồng với public property object  Một binding two-way object kích hoạt INotifyPropertyChanged.PropertyChanged public property read-write List Data Source IList raceCarDrivers = new List { 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"); 9/29/2019 Navigation  Sử dụng BindingManager 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; } 9/29/2019 Complex Binding  Complex Binding ràng buộc control property với list data source dgv.DataSource = raceCarDrivers;  Thay đổi liệu 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); }  Chưa cập nhật cho phần hiển thị! 10 9/29/2019 Chức cần có binding list data source  Mức độ tối thiểu chức ràng buộc liệu sử dụng cho list data source thực cần bao gồm tất yếu tố sau  Hỗ trợ cho mơ hình simple complex binding  Khả thêm, cập nhật xóa item control hiển thị ràng buộc list data source  Việc đưa thông báo thay đổi danh sách item danh sách  Chức chức liên quan khác đóng gói interface ràng buộc liệu IBindingList IBindingList  IBindingList mở rộng IList với chức ràng buộc liệu cụ thể cho list data source  Nếu thông báo thay đổi danh sách hỗ trợ, control bị ràng buộc gắn kết vào event ListChanged để xử lý item thêm vào, cập nhật xố giữ liệu hiển thị đồng với nguồn liệu danh sách  BindingList class triển khai IBindingList 11 9/29/2019 BindingList  Thuộc namespace System.ComponentModel, generic implementation IBindingList BindingList raceCarDrivers = new BindingList { 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++; } 12 9/29/2019 BindingSource  Sử dụng để đóng gói IList có sẵn thành 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); 13 9/29/2019 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); } } 14 9/29/2019 Master-Detail Forms Bài tập  Với liệu Northwind xây dựng ứng dụng đơn giản minh họa Master-Detail form [sử dụng Category Product] (cho phép duyệt, thêm, xóa, sửa, thực navigation có áp dụng data binding) 15

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

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w