data grid view

32
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 1

Upload: tranngochien

Post on 20-Jun-2015

245 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Data Grid View

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

Page 2: Data Grid View

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

Page 3: Data Grid View

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

Page 4: Data Grid View

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

Page 5: Data Grid View

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

Page 6: Data Grid View

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

Page 7: Data Grid View

4. Một số sự kiện trên DataGridView- SelectionChanged

- MultiSelectChanged

- Sorted

- CellClick

- ….

7

Page 8: Data Grid View

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

Page 9: Data Grid View

- Thiết kế FormQuanLySach như sau:

9

Page 10: Data Grid View

- 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

Page 11: Data Grid View

- 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

Page 12: Data Grid View

- Sau khi click:

12

Page 13: Data Grid View

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

Page 14: Data Grid View

14

Page 15: Data Grid View

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

Page 16: Data Grid View

Bước 3: Chọn Ok

16

Page 17: Data Grid View

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

Page 18: Data Grid View

Bước 5: Kéo MenuStrip vào FormMain

- Name: MenuStripMain

18

Page 19: Data Grid View

5.3.2 Cài đặt FormQuanLySachAdd một WindowForm vào project có nội dung như sau:

19

Page 20: Data Grid View

- 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

Page 21: Data Grid View

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

Page 22: Data Grid View

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

Page 23: Data Grid View

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

Page 24: Data Grid View

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

Page 25: Data Grid View

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

Page 26: Data Grid View

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

Page 27: Data Grid View

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