data grid view
TRANSCRIPT
LẬP TRÌNH ỨNG DỤNG QUẢN LÝ 2
DATAGRIDVIEW
GVLT:
Bùi Tấn Lộc
GVHDTH:
Nguyễn Hoàng Anh
Lưu Huỳnh Châu Pha
Ngô Huy Biên
TP.HCM 2008
1
NỘI DUNG
1. Hiển thị dữ liệu vào trong DataGridView control...........................................................32. Các dạng ColumnType sử dụng trong DataGridView Column.......................................33. Thêm Column vào DataGridView...................................................................................44. Một số sự kiện trên DataGridView..................................................................................75. Bài tập thực hành.............................................................................................................85.1 Mô tả đề bài...................................................................................................................8
5.2. Mô tả cơ sở dữ liệu.................................................................................................155.3. Hướng dẫn cài đặt...................................................................................................15
5.3.1 Tạo project........................................................................................................155.3.2 Cài đặt FormQuanLySach................................................................................195.3.3 Cài đặt FormMain.............................................................................................265.3.4 Yêu cầu khác.....................................................................................................27
2
1. Hiển thị dữ liệu vào trong DataGridView controlĐể hiển thị một DataSet hoặc DataTable vào DataGridView control, ta
quan tâm đến Property DataSource và DataMember của DataGridView
Cách sử dụng như sau:
+ Đối với DataSet
DataGridView1.DataSource = ds ‘ ds: DataSet
DataGridView1.DataMember = “Books” ‘ Book : Tên của DataTable trong
ds
+ Đối với DataTable
DataGridView1.DataSource=dt ‘ dt: DataTable
Ngoài ra chúng ta có thể gán DataSource của DataGridView control với một
DataSet bằng việc sử dụng Smart Tag bằng cách chọn một DataSet trong Choose
Data Source ComboBox . Mặt khác có thể tạo mới một DataSet bằng cách chọn
Add Project Data Source trên smart tag.
2. Các dạng ColumnType sử dụng trong DataGridView ColumnCó 6 kiểu control cơ sở có thể sử dụng trong DataGridView
- DataGridViewTextBoxColumn
- DataGridViewCheckBoxColumn
- DataGridViewImageColumn
- DataGridViewButtonColumn
- DataGridViewComboBoxColumn
- DataGridViewLinkColumn
3
Custom Colum Type được sử dụng khi 6 dạng control cơ sở trên không đáp ứng được yêu cầu thể hiện dữ liệu trong DataGridView. Cách tạo ra một Custom Column bằng cách tạo ra một class kế thừa từ DataGridViewColumn hoặc một trong 6 dạng control cơ sở trên.VD:
3. Thêm Column vào DataGridViewBước 1: Chọn DataGridView trên Form
Bước 2: Chọn Collections trên tag Column
4
Public Class MyCustomControl Inherits DataGridViewColumn
End Class
Bước 3: Add column vào trong DataGridView
Chọn Name, Type, HeaderText cho column muốn add vào DataGridView
Bước 4: Định Data Property cho một Column
Khi chọn DataSource cho DataGridView là một DataTable, thường thì ta
không muốn thể hiện hết dữ liệu các cột trong DataTable vào bên trong
5
DataGridView. Muốn vậy ta phải định DataPropertyName tương ứng với Field
Name trong DataTable.
Bước 5: Hiển thị dữ liệu lên lưới
Bình thường khi chọn DataSource cho DataGridView là một DataSet hay
DataTable mặc định DataGridView sẽ tạo ra các column tương ứng với các
column trên DataTable tương ứng. Nhưng thường thì chúng ta chỉ muốn hiển thị
vài field lên DataGridView, như vậy trước khi chọn DataSource cho
DataGridView ta đặt Property AutoGenerateColumns của DataGridView là False
Vd:
DataGridView1.AutoGenerateColumns = False
DataGridView1.DataSource = dt ‘ dt: DataTable
Khi đó DataGridView chỉ hiển thị các column đã được Add và định
DataPropertyName tương ứng với field trên DataTable
Chú ý: Hoàn toàn có thể add các column vào DataGridView bằng code.
6
4. Một số sự kiện trên DataGridView- SelectionChanged
- MultiSelectChanged
- Sorted
- CellClick
- ….
7
5. Bài tập thực hành
5.1 Mô tả đề bài.Viết chương trình quản lý sách với chức năng đơn giản sau:
- Thêm, xóa, cập nhật sách
- Thiết kế giao diện như hình bên dưới (MDI)
- Giao diện dạng MDI, mỗi lúc chỉ có 1 form cùng loại được load lên
Ví dụ: FormQuanLySach đã được load, khi người dùng nhấp vào menu
quản lý sách thì phải hỏi người dùng có muốn load lại hay không?
8
- Thiết kế FormQuanLySach như sau:
9
- Các sự kiện cần cài đặt:
+ FormQuanLySach_Load:
- Load tất cả các nhà xuất bản vào trong ComboBox nhà xuất bản
- Load tất cả các thể loại sách vào trong ComboBox thể loại
Chú ý 2 property DisplayMember và ValueMember của ComboBox
+ComboBox Nhà xuất bản SelectedIndexChanged và ComboBox thể loại
SelectedIndexChanged
- Load tất cả các sách có nhà xuất bản và thể loại đang chọn trên Form
+ DataGridView danh sách sách SelectionChanged và CellClick
Hiển thị nội dung của dòng vừa chọn lên group [Thông tin chi tiết] với nội
dung đầy đủ.
+ Button Thêm Click
- Trước khi click
10
- Sau khi click:
Lưu: Lưu nội dung của sách vừa nhập liệu
Xóa trắng: Soạn lại thông tin chi tiết
Hủy: Bỏ qua chức năng thêm
+ Button Xóa Click
Xóa sách đang chọn trên DataGridView
+ Button Cập Nhật Click
- Trước khi click:
11
- Sau khi click:
12
Lưu: Cập nhật lại nội dung của sách đã chọn và đã thay đổi nội dung(Chú ý vì
chương trình cho phép người dùng cập nhật lại mã sách nên bắt buộc phải lưu lại
mã sách vừa chọn cập nhật trước đó để có đủ thông tin để cập nhật sách sau khi
người dùng thay đổi nội dung của sách muốn cập nhật)
Xóa trắng: Soạn lại thông tin chi tiết
Hủy: Bỏ qua chức năng thêm
+ Button Thoát Click
13
14
5.2. Mô tả cơ sở dữ liệu
5.3. Hướng dẫn cài đặt
5.3.1 Tạo projectBước 1: File New Project
Bước 2: Điền thông tin như bên dưới
15
Bước 3: Chọn Ok
16
Bước 4: Chọn Form1 làm MDIForm
- Text : FormMain
- Name : FormMain
- IsMdiContainer: True
- WindowState: Maximized
Khi đó Form Main có dạng như sau:
17
Bước 5: Kéo MenuStrip vào FormMain
- Name: MenuStripMain
18
5.3.2 Cài đặt FormQuanLySachAdd một WindowForm vào project có nội dung như sau:
19
- Thiết kế FormQuanLySach như sau:
STT Control Properties
1 TextBox - Name: txtMaSach
2 TextBox - Name: txtTuaDe
3 TextBox - Name: txtTacGia
4 TextBox - Name: txtNamXuatBan
5 ComboBox - Name: cbNhaXuatBan
- DisplayMember: Publisher
-ValueMember:PubID
6 ComboBox - Name: cbTheLoai
- DisplayMember: BookStyle
-ValueMember: BookStyleID
7 DataGridView - Name: dgvDanhSach
20
STT Control Properties
- SelectionMode : FullRowSelect
- ReadOnly : True
- MultiSelect: False
- AllowUserToAddRows: False
- Columns
+ MaSach:
- Text: Mã Sách
- DataPropertyName : BookID
+TuaDe
- Text: Tựa đề
- DataPropertyName : Title
+TacGia
- Text: Tác Giả
- DataPropertyName : Author
+NamXuatBan
- Text: Năm Xuất Bản
- DataPropertyName : Year
8 Button - Name: btThem
- Text : Thêm
9 Button - Name: btXoa
- Text: Xóa
10 Button - Name: btCapNhat
- Text : Cập Nhật
11 Button -Name: btThoat
- Text : Thoát
Thêm các thuộc tính và phương thức sau vào class FormQuanLySach
21
Cài đặt các sự kiện cho FormQuanLySach
Cài đặt các sự kiện cho FormQuanLySach
- Sự kiện FormQuanLySach_Load
Private Sub FormQuanLySach_Load(. . .) Me.cbNhaXuatBan.DataSource = DataAccess.Execute("SELECT * FROM PUBLISHER") Me.cbTheLoai.DataSource = DataAccess.Execute("SELECT * FROM BOOKSTYLE") End Sub
- Sự kiện cbNhaXuatBan_SelectedIndexChanged
Private Sub cbNhaXuatBan_SelectedIndexChanged(. . .) Me.LoadDanhSachSach()End Sub
- Sự kiện cbTheLoai_SelectedIndexChanged
Private Sub cbTheLoai_SelectedIndexChanged(. . .)
22
Private _iBookID As Integer
Private Sub LoadDanhSachSach() Dim PubID As String = Me.cbNhaXuatBan.SelectedValue Dim BookStyle As String = Me.cbTheLoai.SelectedValue If PubID IsNot Nothing And BookStyle IsNot Nothing Then Dim sql As String sql = "SELECT * FROM BOOKS WHERE PUBID=" + PubID + " AND BOOKSTYLEID =" + BookStyle Me.dgvDanhSach.AutoGenerateColumns = False Me.dgvDanhSach.DataSource = DataAccess.Execute(sql) If (Me.dgvDanhSach.RowCount < 1) Then Me.XoaTrang() End If End If End Sub
Private Sub ReadOnlyThongTinChiTiet(ByVal b As Boolean) Me.txtMaSach.ReadOnly = b Me.txtTuaDe.ReadOnly = b Me.txtNamXuatBan.ReadOnly = b Me.txtTacGia.ReadOnly = b End Sub
Private Sub XoaTrang() Me.txtMaSach.Text = "" Me.txtTuaDe.Text = "" Me.txtNamXuatBan.Text = "" Me.txtNamXuatBan.Text = "" Me.txtTacGia.Text = "" End Sub
Me.LoadDanhSachSach() End Sub
- Sự kiện dgvDanhSach_SelectionChanged
Private Sub dgvDanhSach_SelectionChanged(. . .) If (Me.btThem.Text <> "Lưu" And Me.btCapNhat.Text <> "Lưu") Then If (Me.dgvDanhSach.RowCount > 0) Then If (Me.dgvDanhSach.CurrentRow.Index < Me.dgvDanhSach.RowCount) Then Dim BookID As String = Me.dgvDanhSach.CurrentRow.Cells(0).Value Dim dt As DataTable Dim sql As String sql = "SELECT * FROM BOOKS WHERE BOOKID=" + BookID dt = DataAccess.Execute(sql) If (dt.Rows.Count = 1) Then Me.txtMaSach.Text = dt.Rows(0)("BookID").ToString() Me.txtTuaDe.Text = dt.Rows(0)("Title").ToString() Me.txtTacGia.Text = dt.Rows(0)("Author").ToString() Me.txtNamXuatBan.Text = dt.Rows(0)("Year").ToString() Me.cbTheLoai.SelectedValue = dt.Rows(0)("BookStyleID").ToString() Me.cbNhaXuatBan.SelectedValue = dt.Rows(0)("PubID").ToString() End If Else Me.XoaTrang() End If End If End If End Sub
- Sự kiện dgvDanhSach_CellClick
Private Sub dgvDanhSach_CellClick(. . .) Me.dgvDanhSach_SelectionChanged(sender, e)End Sub
- Sự kiện btThem_Click
Private Sub btThem_Click(. . .) If (Me.btThem.Text = "Thêm") Then Me.ReadOnlyThongTinChiTiet(False) Me.btThem.Text = "Lưu" Me.btXoa.Text = "Xóa Trắng" Me.btCapNhat.Text = "Hủy" Me.XoaTrang() ElseIf (Me.btThem.Text = "Lưu") Then Dim sql As String Dim BookID As String = Me.txtMaSach.Text
23
Dim Title As String = Me.txtTuaDe.Text Dim Year As String = Me.txtNamXuatBan.Text Dim PubID As String = Me.cbNhaXuatBan.SelectedValue Dim BookStyleID As String = Me.cbTheLoai.SelectedValue Dim Author As String = Me.txtTacGia.Text sql = "INSERT INTO BOOKS VALUES(" sql += BookID + ", " sql += "'" + Title + "', " sql += PubID + ", " sql += Year + ", " sql += BookStyleID + ", " sql += "'" + Author + "'" sql += ")" If (DataAccess.ExecuteNonQuery(sql) = 1) Then MessageBox.Show("Thêm thành công", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Information) Me.btThem.Text = "Thêm" Me.btXoa.Text = "Xóa" Me.btCapNhat.Text = "Cập Nhật" Me.ReadOnlyThongTinChiTiet(True) Me.LoadDanhSachSach() Else MessageBox.Show("Thêm thất bại", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Error) End If ElseIf (Me.btThem.Text = "Hủy") Then Me.ReadOnlyThongTinChiTiet(True) Me.XoaTrang() Me.btThem.Text = "Thêm" Me.btXoa.Text = "Xóa" Me.btCapNhat.Text = "Cập Nhật" End If End Sub
- Sự kiện btXoa_Click
Private Sub btXoa_Click(. . .) If Me.btXoa.Text = "Xóa" Then If (Me.btThem.Text <> "Lưu" And Me.btCapNhat.Text <> "Lưu") Then If (Me.dgvDanhSach.Rows.Count > 0) Then If (Me.dgvDanhSach.CurrentRow.Index < Me.dgvDanhSach.RowCount) Then Dim BookID As String = Me.dgvDanhSach.CurrentRow.Cells(0).Value Dim sql As String sql = "DELETE FROM BOOKS WHERE BOOKID=" + BookID If (DataAccess.ExecuteNonQuery(sql) = 1) Then MessageBox.Show("Xóa thành công", "Xóa", MessageBoxButtons.OK, MessageBoxIcon.Information) Me.LoadDanhSachSach() Else MessageBox.Show("Xóa thất bại", "Xóa", MessageBoxButtons.OK, MessageBoxIcon.Error) End If
24
End If
End If
End If ElseIf Me.btXoa.Text = "Xóa Trắng" Then Me.XoaTrang() End IfEnd Sub
- Sự kiện btCapNhat_Click
Private Sub btCapNhat_Click(. . .) If (Me.btCapNhat.Text = "Hủy") Then Me.ReadOnlyThongTinChiTiet(True) Me.XoaTrang() Me.btThem.Text = "Thêm" Me.btXoa.Text = "Xóa" Me.btCapNhat.Text = "Cập Nhật" ElseIf Me.btCapNhat.Text = "Cập Nhật" Then Me.ReadOnlyThongTinChiTiet(False) Me.btThem.Text = "Hủy" Me.btXoa.Text = "Xóa Trắng" Me.btCapNhat.Text = "Lưu" Me._iBookID = Integer.Parse(Me.txtMaSach.Text) ElseIf Me.btCapNhat.Text = "Lưu" Then Dim sql As String Dim BookID As String = Me.txtMaSach.Text Dim Title As String = Me.txtTuaDe.Text Dim Year As String = Me.txtNamXuatBan.Text Dim PubID As String = Me.cbNhaXuatBan.SelectedValue Dim BookStyleID As String = Me.cbTheLoai.SelectedValue Dim Author As String = Me.txtTacGia.Text sql = " UPDATE BOOKS SET " sql += " BOOKID=" + BookID + ", " sql += " TITLE='" + Title + "', " sql += " PUBID=" + PubID + ", " sql += " BOOKSTYLEID=" + BookStyleID + ", " sql += " AUTHOR='" + Author + "' " sql += " WHERE BOOKID=" + Me._iBookID.ToString() If (DataAccess.ExecuteNonQuery(sql) = 1) Then MessageBox.Show("Cập nhật thành công", "Cập nhật", MessageBoxButtons.OK, MessageBoxIcon.Information) Me.btThem.Text = "Thêm" Me.btXoa.Text = "Xóa" Me.btCapNhat.Text = "Cập Nhật" Me.ReadOnlyThongTinChiTiet(True) Me.LoadDanhSachSach() Else MessageBox.Show("Cập nhật thất bại", "Cập nhật", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End If End Sub
- Sự kiện btThoat_Click
25
Private Sub btThoat_Click(. . .) Dim dr As DialogResult = MessageBox.Show("Bạn có muốn thoát?", "Thoát", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) If (dr = Windows.Forms.DialogResult.Yes) Then Me.Close() End If End Sub
5.3.3 Cài đặt FormMain
- Thiết kế tiếp FormMain như hình sau:
Cài đặt cho sự kiện SáchToolStripMenuItem_Click
Private Sub SáchToolStripMenuItem_Click(. . .) Dim frms As Form() = Me.MdiChildren If (frms.Length > 0) Then Dim dr As Windows.Forms.DialogResult = MessageBox.Show("FormQuanLySach đã được load, Bạn có muốn Load lại?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) If dr = Windows.Forms.DialogResult.Yes Then frms(0).Close() Dim frm As New FormQuanLySach() frm.MdiParent = Me frm.Show() End If Else Dim frm As New FormQuanLySach() frm.MdiParent = Me
26
frm.Show() End If End Sub
5.3.4 Yêu cầu khác.
- Kiểm tra dữ liệu và các điều kiện hợp lệ- Thiết kế lại ứng dụng theo mô hình 3 – Layer- Giao diện đẹp + tiện dụng
27