16
Hướng dn thc hành - Lp trình Windows nâng cao phn CSDL Trang 1/16 Hướng Dn Thc Hành Lp Trình Windows Nâng Cao Khi: Cao Đẳng nghvà Trung Cp Năm 2009 Hướng dn: Bài tp thc hành được chia làm nhiu Module Mi Module được thiết kế cho thi lượng là 3 tiết thc hành ti lp vi shướng dn ca ging viên. Tùy theo stiết phân b, mi tun hc có ththc hin nhiu Module. Sinh viên phi làm tt ccác bài tp trong các Module tun tương ng. Nhng sinh viên chưa hòan tt phn bài tp t i lp có trách nhim tlàm tiếp tc nhà. Các bài có du (*) là các bài tp nâng cao dành cho sinh viên khá gii.

Hướng Dẫn Thực Hành - Thangdhcn's Weblog · • Khi form load đổ dữ liệu từ bảng SinhVien vào Combobox sao cho text xuất hiện trong Combobox là TenSV và

  • Upload
    lydat

  • View
    254

  • Download
    0

Embed Size (px)

Citation preview

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 1/16

HHưướớnngg DDẫẫnn TThhựựcc HHàànnhh

LLậậpp TTrrììnnhh WWiinnddoowwss NNâânngg CCaaoo Khối: Cao Đẳng nghề và Trung Cấp

Năm 2009

Hướng dẫn:

• Bài tập thực hành được chia làm nhiều Module

• Mỗi Module được thiết kế cho thời lượng là 3 tiết thực hành tại lớp với sự

hướng dẫn của giảng viên.

• Tùy theo số tiết phân bổ, mỗi tuần học có thể thực hiện nhiều Module.

• Sinh viên phải làm tất cả các bài tập trong các Module ở tuần tương ứng.

Những sinh viên chưa hòan tất phần bài tập tại lớp có trách nhiệm tự làm

tiếp tục ở nhà.

• Các bài có dấu (*) là các bài tập nâng cao dành cho sinh viên khá giỏi.

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 2/16

Module 1

Nội dung kiến thức thực hành:

+Một số thuộc tính của các control

+Các đối tượng móc nối CSDL trong mô hình ADO.NET

+Thiết lập giao diện chương trình móc nối CSDL thông qua sự kết hợp giữa các

control

Bài 1. Mục đích:

Sử dụng cho Sinh Viên nhớ lại cách tạo CSDL Access

Mô tả: 1) Hãy tạo CSDL sau: với tên là QLDiem.MDB trên ổ đĩa D :\ HoTenSinhVien\

Cấu trúc các bảng:

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 3/16

Nhập liệu theo thứ tự bảng cha trước con sau. Sinh Viên có thể nhập tên tùy ý nhưng Mã phải chín xác:

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 4/16

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 5/16

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 6/16

2)Sinh viên đánh giá thao tác nhập liệu Access như thế nào? 3) Giáo viên hướng dẫn đưa CSDL cho Sinh Viên làm cho thống nhất CSDL. 4) Sinh viên tạo Project với tên XemThongTin theo yêu cầu sau.

5) Xóa Form mặc định (Form1.cs) và thêm Form mới là frmChinh.cs, Đây là form MDI Parent(Form cha). Cách tạo form như sau: vào menu Project->Add Windows Form, hộp thoại Add New Item xuất hiên:

Chọn đối tượng là MDI Parent

Đặt tên form là frmChinh.cs

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 7/16

Chọn Add chương trình sẽ tạo ra một form có giao diện mặc định như sau:

Hãy sửa đổi các Menu và Toolbar trên Form như hình sau: Đặt tên cho các menu và toolbar Button tương ứng. Ví dụ: mnuFile, mnuFileDataGridView,...

ợi ý:

6) Thêm 4 form form con vào Project với tên

+ frmSinhVien

Status bar hiển thị ngày giờ hiện hành

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 8/16

+ frmChonBang

+ frmUnboundSinhVien

+ frmTreeVaListKetHop

7) Viết lệnh tương ứng cho các Menu hiên lên các form tương ứng. 8) Thêm một class vào Project bằng cách vào menu Project->Add Class và đặt tên là

clsQuanLyDiemSV sau đó viết hàm Constructor(khởi tạo) và hàm GetdatasetmotTBL trả về mộ Dataset nhưng chỉ chứa một bảng theo gợi ý sau.

Trước tiên cần khai báo hai dòng sau ở phần trên cùng của class để sử dụng đối tượng móc nối CSDL: using System.Data; using System.Data.OleDb;

//Khai báo biến tòan cục dùng cho class OleDbConnection con = new OleDbConnection(); //Đây là hàm không có giá trị trả về và sẽ tự động thực hiên khi gọi đối //tượng(class) bằng từ khóa new instance

public clsQuanLyDiemSV()// constructor trùng tên ClS { //Đây là dòng lệnh kết nối với cơ sở dữ liệu SV phải thuộc con.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=QLDiem.mdb"; //Mở cơ sở dữ liệu vừa kết nối con.Open();

}

public DataSet getDataSet(string tableName) { /*Mục đích của hàm này là lấy dữ liệu từ bảng * có tên là tableName đổ vào DataSet, dữ liệu * trả về kiểu DataSet*/ //Khai báo các biến string sql; OleDbDataAdapter da = new OleDbDataAdapter(); OleDbCommand cmd = new OleDbCommand(); DataSet ds = new DataSet(); //Dùng câu lệnh SQL để lấy dữ liệu sql = "select * from " + tableName; //Gán kết nối cho cmd cmd.Connection = con; cmd.CommandType = CommandType.Text; cmd.CommandText = sql; da.SelectCommand = cmd; //Đổ dữ liệu vào ds

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 9/16

da.Fill(ds, tableName); //Trả về ds sau khi đã có dữ liệu return ds;

}

9) Áp dụng mô hình móc nối CSDL đưa dữ liệu lên form

frmSinhVien theo thiết kế sau.

10) Xem hướng dẫn thực hiện trong giáo trình.

Yêu cầu: Khi form vừa load lên thì hiện thông tin bảng SinhVien trong CSDL Gợi ý: Trước tiên cần phải khai báo một biến tòan cục kiểu clsQuanLyDiemSV tên là obj: clsQuanLyDiemSV obj = new clsQuanLyDiemSV(); Vào sụ kiên form load của form frmDataGridView nhập đọan code sau: private void frmcon_Load(object sender, EventArgs e) { //Khai báo một biến kiểu DataSet DataSet ds = new DataSet(); //Gọi lại hàm getDataSet của đối tượng obj để đổ dữ liệu //từ bảng SinhVien vào ds ds = obj.getDataSet("SinhVien"); //Gán bảng SinhVien vừa lấy ở ds vào DataGridView //Kiểu dữ liệu của DataSource là một DataTable hoặc DataView //Do đó chúng ta phải sử dụng properties ds.Tables[Bảng] //với Bảng là tên của bảng truyền vào hoặc là một số chỉ ra vị trí của bảng //đổ ở trong ds dgrView.DataSource = ds.Tables["SinhVien"];

//có thể dùng //dgrView.DataSource = ds.Tables[0];

DataGridview (dgrSinhVien)

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 10/16

}

10 ) Quay lại Class viết thêm hai hàm GetDataTable và GetDataSetAllTL như sau:

public DataTable getDataTable(string tableName) { /*Chỉ cần gọi lại hàm getDataSet ở trên và * .Tables[tableName] hoặc .Tables[0]*/ return getDataSet(tableName).Tables[tableName];

}

public DataSet getDataSetAllDL() { OleDbDataAdapter daSV = new OleDbDataAdapter(); OleDbDataAdapter daLop = new OleDbDataAdapter(); OleDbDataAdapter daKhoa = new OleDbDataAdapter(); OleDbDataAdapter daDiem = new OleDbDataAdapter(); OleDbDataAdapter daMonHoc = new OleDbDataAdapter(); OleDbCommand cmd = new OleDbCommand(); DataSet ds = new DataSet(); cmd.Connection = con; cmd.CommandType = CommandType.Text; //--------Lấy bảng Sinh viên:----------------\\ cmd.CommandText = "select * from SinhVien"; daSV.SelectCommand = cmd; daSV.Fill(ds, "SinhVien"); //---------Lấy bảng Lớp:---------------------\\ cmd.CommandText = "select * from Lop"; daLop.SelectCommand = cmd; daLop.Fill(ds, "Lop"); //---------Lấy bảng Khoa:---------------------\\ cmd.CommandText = "select * from Khoa"; daKhoa.SelectCommand = cmd; daKhoa.Fill(ds, "Khoa"); //----------Lấy bảng Môn học:----------------\\ cmd.CommandText = "select * from MonHoc"; daMonHoc.SelectCommand = cmd; daMonHoc.Fill(ds, "MonHoc");

ds 0

1

2

3

4

SinhVien

Diem

MonHoc

Khoa

Lop

Bảng

Vị trí trong ds

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 11/16

//-----------Lấy bảng Điểm:-------------------\\ cmd.CommandText = "select * from Diem"; daDiem.SelectCommand = cmd; daDiem.Fill(ds, "Diem"); return ds;// ds đã chứa 5 bảng } 11) Thiết kế lại form frmChonBang như sau: Yêu cầu: + Khi form vừa load hiện vào Combobox là tên các bảng + Chọn thông tin bảng nào trong Combobox thì hiện thông tin bảng đó vào DataGridview Gợi ý:

private void frmDGRViewChonBang_Load(object sender, EventArgs e) { DataSet ds = new DataSet(); //Lấy tất cả các bảng ds = obj.getAllDataSet(); /*Duyệt qua từng bảng và lấy tên bảng đưa vào combobox*/ foreach (DataTable tbl in ds.Tables) { cboChonBang.Items.Add(tbl.TableName); }

} Đoạn code Đưa vào DataGridview: private void cboChonBang_SelectedIndexChanged(object sender, EventArgs e)

{ string tenbang; DataTable tbl = new DataTable; //Lấy ra tên bảng từ combobox tenbang = cboChonBang.SelectedItem.ToString(); //Đổ dữ liệu của bảng này vào tbl tbl = obj.getDataTable(tenbang);

DataGridview

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 12/16

//gán tbl vào dataSource của DataGridView dgrView.DataSource = tbl; }

12) Thiết kế form frmUnboundSinhVien như sau. Binding data bằng kỹ thuật

UnBoundcontrol.

Yêu cầu:

• Khi form load đổ dữ liệu từ bảng SinhVien vào Combobox sao cho text xuất hiện trong Combobox là TenSV và khi chọn phải lấy được MaSV.

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 13/16

• Khi chọn một sinh viên từ Combobox thì cho hiện thông tin của sinh viên đó vào các label tương ứng.

Gợi ý: • Vào class clsQuanLyDiemSV.cs soan hàm GetDataTableMotSvVtrả về kiểu DataTable là một bảng chứa thông tin của sinh viên có MaSV bằng mã sinh viên truyền vào, đoạn code như sau:

public DataTable getDataTableMotSV(string strma) { string sql; OleDbDataAdapter da = new OleDbDataAdapter(); OleDbCommand cmd = new OleDbCommand(); DataSet ds = new DataSet(); sql = "select * from SinhVien where MaSV='" + strma + "'"; cmd.Connection = con; cmd.CommandType = CommandType.Text; cmd.CommandText = sql; da.SelectCommand = cmd; da.Fill(ds, "SinhVien"); return ds.Tables["SinhVien"]; • }

• •

Trên form đổ dữ liệu vào Combobox bằng cách vào sự kiện form load của form frmBoundControl nhập đọan code sau:

DataTable tbl = new DataTable(); //lấy dữ liệu từ bảng SinhVien tbl = obj.getDataTable("sinhvien"); //Cho text hiện trong combobox là TenSV cboSV.DisplayMember = "TenSV"; //Khi chọn thì dữ liệu trả về là MaSV

cboSV.ValueMember = "MaSV"; //Gán bảng vừa lấy vào combobox cboSV.DataSource = tbl;

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 14/16

• Ở sự kiên selectedIndexChanged của combobox viết như sau: private void cboSV_SelectedIndexChanged(object sender, EventArgs e) { if (cboSV.SelectedValue != null) { DataTable tbl = new DataTable(); //tbl chỉ chứa được 1 row duy nhất tbl = obj.GetDataTableMotSV(cboSV.SelectedValue.ToString()); BidingDataUBoundText(tbl); } }

• Soạn hàm BindingDataUBoundText như sau: void BidingDataUBoundText(DataTable tbl) { DataRow drw; drw = tbl.Rows[0]; lblma.Text= drw["MaSV"].ToString() ; lblten.Text =drw["TenSV"].ToString() ; lbldc.Text= drw["DiaChi"].ToString() ; lblns.Text = drw[3].ToString() ; //lblns.Text=drw["NgaySinh"]; }

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 15/16

13 *) Thiết và đưa dữ liệu vào frmTreeVaListKetHop Sinh viên thiết kết form như sau

Gới ý và yêu cầu: + Thiết kế form có SplitContainer một bên Tree và một bên Listview (xem hình) + Ápdụng vòng lặp duyệt từng dòng đưa dữ liệu vào Treeview theo nguyên tắc

- Nút gốc là mã SinhVien - Các nút con là thông tin các cột còn lại trong bảng SinhVien

+ Nhấn vào node gốc (Mã Sinh Viên) hiện thông tin điểm của sinh viên đó vào Listview (xem hình).

14*) Về nhà Sinh Viên làm các bài tập trên nhưng móc nối với CSDL SQL Gợi ý: Đưa nguồn dữ liệu CSDL SQL từ các bảng Access 15* Tương tự như bài 14 nhưng thay tree bằng giao diên flowlayout và node cha (mã SV) thay bằng button động được tạo ra khi runtime. Chọn trên các button mã SV thì cũng hiện thông tin qua listview như ài 14.

Hướng dẫn thực hành - Lập trình Windows nâng cao phần CSDL

Trang 16/16

Thiết kế có dạng

Khi chạy có dạng

Nhấn load DL vào listview