Thứ Ba, 19 tháng 3, 2019

PHẦN 3: Cách Navigate Data trong Windows Forms

PHẦN 3: CÁCH NAVIGATE DATA TRONG WINDOW FORMS

Trong ứng dụng window, cách dễ nhất để duyệt qua các record trong dât source là kết nối một BindingSource componnet với một datasource và sau đó bind control vào Binding Source. Sau đó bạn có thể sử dụng các phương thức trên Binding source như MoveNext, MoveLast, MovePrevious và MoveFirst. Sử dụng các method này sẽ điều chỉnh thuộc tính Position và Current của BindingSource một cách tự động. Bạn có thể tìm những item và đặt chúng là item hiện tại, bằng cách setting thuộc tính Position.

Để tăng vị trí Position trong datasource

- Set thuộc tính position của BindingSource cho data của bạn thành record mà bạn muốn đi tới

Lưu ý là khi set thuộc tính Position thành một giá trị vượt ngoài record cuối cùng sẽ không gây ra một lỗi, bởi .Net framework cho phép bạn set vị trí nằm ngoài bounding list. Nếu quan trọng cho ứng dụng của bạn để biết được rằng bạn đã đi quá record đầu tiên hay cuối cùng hay không, chèn thêm một lệnh logical test mỗi khi bạn thi hành.
MoveNext() có thể khiến position đi quá vị trí cuối cùng

Kiểm tra khi bạn đi quá vị trí cuối cùng hoặc đầu tiên

- Thêm một event handler cho event PositionChanged

Void customersBindingSource_PositionChanged(object sender, EventArgs e)
{
          If (customersBindingSource.Position == customersBindingSource.Count -1)
                   nextButton.Enabled = false;
          else
                   nextButton.Enabled = true;
}

Tìm kiếm một item và set nó là item hiện tại

- Để tìm một record mà bạn muốn set làm item hiện tại, bạn có thể sử dụng phương thức Find() của BindingSource, datasource của bạn được cài đặt bằng IBindingList. 

Một số ví dụ của data source cài đặt IBindingList là BingingList<T> và DataView

Void findButton_Click (object sender, EventArgs e)
{
          Int foundIndex = customersBindingSource.Find(“CustomerID”, “Action”);
          customersBindingSource.Position = foundIndex;
 }

Về method Find()

Find(PropertyDescriptor, Object)

Tìm kiếm index của một item có mô tả của property

Private void button1_Click(object sender, EventArgs e)
{
          If (binding1.SupportsSearching != true)
                   MessageBox.Show(“Không thể tìm kiếm do không hỗ trợ!”);
          Else
          {       
                   Int foundIndex = binding1.Find(“Name”, textBox1.Text);
                   If (foundIndex> -1) listBox1.SelectedIndex = foundIndex;
                   Else
                             MessageBox.Show(“Không tìm thấy mục ” + textBox1.Text);
}

}

Thứ Tư, 13 tháng 3, 2019

Phần 2: Các nguồn DataSource được Windows Form hỗ trợ

CÁC NGUỒN DATASOURCE ĐƯỢC WINDOWS FORM HỖ TRỢ

BindingSource
BindingSource là nguồn dữ liệu cơ bản và hoạt động như một cổng kết nối giữa datasource và Windows forms control. BindingSource cũng cung cấp chuyển đổi dữ liệu IEnumerable sang dạng IList (trong trường hợp Datagridview và Combobox không hỗ trợ IEnumerable)

Object đơn giản
Windows Forms hỗ trợ kết nối properties của data binding với những public properties của một vật thể bằng cách sử dụng Binding type.

Mảng hoặc collection
Để hoạt động như một datasource, một danh sách phải được cài đặt IList interface (index List), một ví dụ đơn giản là một array
Thông thường bạn nên dùng BindingList<T> khi bạn tạo một danh sách những object cho databinding. BindingList<T>là một generic version của IBindingList interface. IBingingList  interface mở rộng IList interface bằng cách thêm vào những thuộc tính và phương thức cũng như event cần thiết cho việc kết nối 2 chiều

IEnumerable
Window Forms có thể kết nối với data source chỉ hỗ trợ IEnumerable nếu chúng được kết nối thông qua một BindingSource component

Các object của ADO.NET data objects

ADO.NET cung cấp một số cấu trúc thích hợp cho việc kết nối. Mỗi loại đều khá tinh vi và phức tạp

DataColumn: cần thiết để xây dựng một datatable, mỗi datacolumn có một thuộc tính Datatype, quy định kiểu dữ liệu của dữ liệu mà nó chứa
Bạn có thể simple-bind một control (ví dụ trường text của textbox) vào một column trong table

DataTable: là một bảng gồm nhiều cột và dòng. Trong ADO.NET datatable chứa 2 collection: một DataColumns hiển thị những cột  trong datatable, và datarow, hiển thị các dòng của data.

Bạn có thể complex-bind một control vào những thông tin chứa trong một datatable.
DataView: Dataview là một view được tùy chỉnh của một table đơn mà có thể lọc được hoặc sắp xếp được. Một dataview là một “hình chụp” của dữ liệu sử dụng bởi complex-build control. Lưu ý bạn chỉ đang kết nối tới một “bức ảnh” của dữ liệu, thay vì dữ liệu chuẩn, được update

DataSet: là tập hợp của nhiều tables. Bạn có thể simple-bind hoặc complex-bind những dữ liệu trong dataset, nhưng hãy lưu ý rằng bạn đang kết nối với DataViewManager dành cho Dataset (xem DataViewManager)

DataViewManager: DataViewManager là một view tùy chỉnh của một khối DataSet, tương tự như DataView, nhưng với cả những relations được thêm vào. Với DataViewSettings collection, bạn có thể chọn bộ lọc chuẩn và tùy cọn sắp xếp chon bất kỳ views nào mà DataViewManager cung cấp cho table


Bài viết được dịch từ windows forms documentation của microsoft https://docs.microsoft.com/en-us/dotnet/framework/winforms/data-sources-supported-by-windows-forms

Phần 1: Tổng quan về kết nối dữ liệu - DataBinding trong Winforms

WINDOWS FORMS DATA BINDING
Data binding trong windows form cho cahcs thức thay đổi thông tin trong một nguồn datasource trong các control của form. Bạn có thể kết nối theo cả data dạng truyền thống, cũng như toàn bộ các cấu trúc chứa data khác
Data Binding trong Windows Forms
Trong windows form bạn không những có thể kết nối data truyền thống, mà còn toàn bộ các cấu trúc chứa data khác. Bạn có thể kết nối với một mảng các giá trị mà bạn tính toán lúc run time, đọc từ một file, hoặc kế thừa từ giá trị của một control khác
Các dạng của data bindings
Có hai dạng là đơn giản và phức tạp
Kết nối data đơn giản:
+ Kết nối data tới một phần tử đơn, ví dụ như giá trị một column trong một dataset table. Dạng kết nối này của những control chỉ hiển thị giá trị đơn như Textbox, Label
Kết nối đata phức tạp:
+ Kết nối đến nhiều hơn một phần tử data, thông thường là nhiều dòng trong một database. Kết nối phức tạp cũng được gọi là kết nối dạng list-base (dựa trên danh sách).
+ Những control cho phép kết nối phức tạp là Datagridview, Listbox, combox
BINDINGSOURCE COMPONENT
Để đơn giản hóa quá trình kết nối, Windows Forms cho phép bạn kết nối data tới một BindingSource. Bạn có thể dùng BindingSource trong trường hợp kết nối đơn giản hoặc phức tạp. Trong mỗi trường hợp, Bindingsource hoạt động như một vật trung chuyển giữa datasource và bound controls, cung cấp những thông báo và những dịch vụ khác.
Các trường hợp cần kết nối data binding
Gần như tất cả các ứng dụng thương mại đều sử dụng thông tin được đọc tử datasource dạng này hay dạng khác, thông thường thông qua databidning.
+ Báo cáo: Báo cáo là một dạng uyển chuyển cung cấp để bạn hiển thị và tổng hợp data của mình trong một tài liệu in. Rất thông thường để tạo một report in những thành phần được chọn .
+ Data entry (nhập liệu): Cách thông thường để đi vào một lượng lớn dữ liệu liên quan hoặc gợi ý cho người dùng nhập thông tin, sau đó thông tin được lưu vào cơ sở dữ liệu
+ Master – detail relationship: một ứng dụng có định dạng tìm kiếm cho những thông tin liên quan nhau. Đặc biệt là khi có hai bảng có relation liên kết giữa chúng.
+ Lookup Table: Một dạng thông thường khác hiển thị/tính toán dữ liệu. Thông thường, khi một lượng lớn dữ liệu được hiển thị, một Combobox control được sử dụng để hiển thị và tính toán dữ liệu. Key mà data hiển thị trong combobox control khác với dữ liệu được ghi vào database. Ví dụ một combobox hiển thị những mặt hàng có trong siêu thị, bạn sẽ muốn hiển thị tên mặt hàng, nhưng khi ghi vào cơ sở dữ liệu, bạn phải ghi vào bằng những số hiệu (ví dụ #501, #502, vv)

Tài liệu được dịch từ documentation của Microsoft https://docs.microsoft.com/en-us/dotnet/framework/winforms/data-binding-and-windows-forms