- Về thái độ:
q. Kiểm tra quan hệ có thuộc về DataSet:
<DataSet>.Relations.Contains(<tên quan hệ>)
Phương thức trả về True nếu trong Relations có quan hệ tên <tên quan hệ>, ngược lại là False.
5.6.3 Ví dụ minh họa làm việc với DataSet
150 trình form sẽ thể hiện các thông tin như hình dưới đây. Người sử dụng có thể sử dụng các nút đầu, cuối, trước, sau hoặc bấm trực tiếp trên lưới để xem thông tin sản phẩm.
Hướng dẫn tạo form: Sử dụng công cụ datagridview để thêm lưới dg1 vào form. Các button Đầu, Trước, Sau, Cuối lần lượt có tên là btdau, btt, bta, btc. Các hộp textbox tương ứng với mã sản phẩm là txtmsp; tên sản phẩm là txttensp, đơn giá là txtdg; nhà cung cấp là txtncc.
Trong phần code chúng ta sẽ định nghĩa một đối tượng dataset có tên dst, tầm vực đơn thể class và một đối tượng dataAdapter có tên da1 lấy dữ liệu từ bảng sanpham của cơ sở dữ liệu De1 trên server HTC-VAIO\Huyen. Module khai báo kết nối và chuỗi kết nối được tạo như trong ví dụ 5.2b.
Để di chuyển con trỏ bản ghi ta sử dụng lớp có tên là BindingContext của form. BindingContext là đối tượng quản lý các BindingManagerBase. Các đối tượng kế thừa từ lớp Control đều có thể có BindingContext. Tuy nhiên, chỉ có Form và các điều khiển chứa các điều khiển khác như Groupbox, TabControl, Panel mới có thể tạo một BindingContext để quản lý các BindingManagerBase hiển thị dữ liệu của các điều khiển chứa trong nó.
Vị trí của con trỏ bản ghi được xác định hoặc thiết lập thông qua đối tượng Position của BindingContext bằng cách sử dụng một trong hai cú pháp sau:
Me.BindingContext()(datasource).Position Hoặc
Me.BindingContext()(datasource,datamember).Position Phần code của form:
151
Public Class FrmDataSet_1
Dim dst As New DataSet
Private Sub FrmDataSet_1_Load...
Dim lenh As String = "select masp as 'Mã SP', _ tensp as 'Tên SP',dongia as 'Đơn giá', _
nhacc as 'Nhà CC' from sanpham"
Dim da1 As New SqlClient.SqlDataAdapter(lenh, Chuoi_ket_noi) dst.Clear() 'xóa nội dung dataset
da1.Fill(dst, "sanpham") 'đổ DL vào bảng sản phẩm của dst
'khai báo thuộc tính cho lưới dg1
dg1.DataSource = dst
dg1.DataMember = "sanpham"
End Sub
Private Sub btdau_Click...
'chuyển con trỏ về bản ghi đầu tiên
Me.BindingContext()(dst, "sanpham").Position = 0 End Sub
Private Sub btt_Click ...
'chuyển con trỏ về bản ghi trước
Me.BindingContext()(dst, "sanpham").Position -= 1
End Sub
Private Sub bts_Click ...
'chuyển con trỏ về bản ghi tiếp theo
Me.BindingContext()(dst, "sanpham").Position += 1 End Sub
Private Sub btc_Click...
'chuyển con trỏ về bản ghi cuối cùng
Me.BindingContext()(dst, "sanpham").Position = _ Me.BindingContext()(dst, "sanpham").Count - 1 End Sub
'thủ tục in thông tin của sản phẩm khi thay đổi bản ghi hiện thời
Private Sub dg1_SelectionChanged...
Dim dong%
'lấy giá trị dòng hiện thời của lưới dg1
dong = dg1.CurrentCellAddress.Y
152
txtmsp.Text = dg1.Item(0, dong).Value txttensp.Text = dg1.Item(1, dong).Value txtdg.Text = dg1.Item(2, dong).Value txtncc.Text = dg1.Item(3, dong).Value End Sub
End Class
Visual Basic.NET cung cấp một tính năng có thể tự động chèn các DataAdapter và DataSet vào project.
Chẳng hạn trong ví dụ 5.9 trên chúng ta có thể thêm các điều khiển DataAdapter và DataSet như sau: