Giáo trình Mô đun Xây dựng ứng dụng Windows - Hệ thống thông tin
Tổng quan controls
Control là một thành phần cơ bản trên form
Có các thành phần
oThuộc tính
oPhương thức
oSự kiện
Tất cả các control chứa trong namespace:System.Windows.Forms
Một số thuộc tính của control
Text: mô tả text xuất hiện trên control
Focus: phương thức chuyển focus vào control
TabIndex: thứ tự của control nhận focus
o Mặc định được VS.NET thiết lập
Enable: thiết lập trạng thái truy cập của control
Visible: ẩn control trên form, có thể dùng phương thức Hide
Anchor:
o Neo giữ control ở vị trí xác định
o Cho phép control di chuyển theo vị trí
Size: xác nhận kích thước của control

Trang 1

Trang 2

Trang 3

Trang 4

Trang 5

Trang 6

Trang 7

Trang 8

Trang 9

Trang 10
Tải về để xem bản đầy đủ
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Mô đun Xây dựng ứng dụng Windows - Hệ thống thông tin", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Giáo trình Mô đun Xây dựng ứng dụng Windows - Hệ thống thông tin
không ? hay một component để tính tổng chi phí,
Bussiness Entities : thường được sử dụng như Data Transfer Objects ( DTO ) . Bạn
có thể sử dụng để truyền dữ liệu giữa các lớp (Presentation và Data Layer). Chúng
thường là cấu trúc dữ liệu ( DataSets, XML, ) hay các lớp đối tượng đã được tùy
chỉnh.
Ví dụ : tạo 1 class Student lưu trữ các dữ liệu về tên, ngày sinh, ID, lớp.
3. Data Layer (DAL) :
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 97
Data Access Logic Components : chịu trách nhiệm chính lưu trữ và truy xuất dữ liệu
từ các nguồn dữ liệu (Data Sources) như XML, file system, Hơn nữa còn tạo thuận
lợi cho việc dễ cấu hình và bảo trì.
Service Agents : giúp bạn gọi và tương tác với các dịch vụ từ bên ngoài một cách
dễ dàng và đơn giản.
5.1.2. Mô hình đa tầng
N-Tier Architecture?
Kiến trúc N-tier còn được gọi là multi-tier architecture, một phương pháp kiến trúc
ứng dụng trong phát triển phần mềm. Nó thích hợp cho việc xây dựng các ứng dụng
lớn, đặc biệt là các ứng dụng doanh nghiệp, các ứng dụng đòi hỏi tính scalability,
security, fault tolerance, reusability và maintainability.
Gọi là N-tier điều đó có nghĩa kiến trúc này có thể có 1, 2, 3 hoặc hơn số các layer phụ
thuộc vào cách phân chia kiến trúc hệ thống. Tuy nhiên 3-Tier vẫn là mẫu phổ biến
nhất và được định nghĩa cụ thể về trách nhiệm từng tier như sau:
Tầng Presentation: Chính là Giao diện người dùng, đây chính là phần mềm ứng dụng
mà người dùng sẽ thấy và tương tác (Có thể là Website hoặc Mobile App, hoặc
Window app). Khi người dùng nhập thông tin họ cần. Hành động người dùng được xử
lí đi qua các tầng Logic, tầng Data.
Tầng Logic: Đây là tầng chứa tất cả những phương pháp xử lý, đọc & ghi dữ liệu trước
khi đưa đến UI người dùng, nó những gì được cho phép trong ứng dụng của bạn.
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 98
Tầng Data: Tầng Data là nơi lưu trữ tất cả dữ liệu trong ứng dụng, tại tầng này bạn
thực hiện các phương thức lưu trữ dữ liệu vào DB, triển khai các giải pháp bảo mật,
transaction cần thiết.
5.1.3. Xây dựng lớp xử lý lưu trữ
Tại sao mình lại xây dựng Data Access trước? Đơn giản là đây là lớp mà ta xử lý bên
database, làm trước thì design GUI xong chỉ việc bỏ vào sử dụng thôi
Điều quan trọng đầu tiên, chúng ta cần tạo class DBConnect.cs với nội dung như sau:
using System.Data.SqlClient;
namespace DAL_QuanLy
{
public class DBConnect
{
protected SqlConnection _conn = new SqlConnection("Data
Source=ADMINISTRATOR\SQLEXPRESS;Initial Catalog=ThanhVien;Integrated
Security=True");
}
}
Copy
Chúng ta sẽ tạo SqlConnection và khởi tạo luôn, sau này các class DAL chúng ta chỉ
cần kế thừa class DBConnect là có thể sử dụng _conn thoải mái ko cần khởi tạo lại.
Các bạn nhớ sửa lại connection string cho chuẩn bên máy của các bạn nhé. Ở đây vì
bài tập đơn giản nên ta chịu khó hard-code vậy :D. Chúng ta có nhiều cách khác nhau
để tránh hard-code nhưng mình sẽ nói sau ở các bài khác.
Mình sẽ tạo file DAL_ThanhVien.cs (Class file)
Ở đây mình sẽ làm sẵn luôn 4 methods là: Lấy tất cả, Thêm, Xóa, Sửa nhé
DAL_ThanhVien.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using DTO_QuanLy;
namespace DAL_QuanLy
{
public class DAL_ThanhVien : DBConnect
{
///
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 99
/// Get toàn bộ thành viên
///
///
public DataTable getThanhVien()
{
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM
THANHVIEN", _conn);
DataTable dtThanhvien = new DataTable();
da.Fill(dtThanhvien);
return dtThanhvien;
}
///
/// Thêm thành viên
///
///
///
public bool themThanhVien(DTO_ThanhVien tv)
{
try
{
// Ket noi
_conn.Open();
// Query string - vì mình để TV_ID là identity (giá trị tự tăng dần) nên ko
cần fải insert ID
string SQL = string.Format("INSERT INTO THANHVIEN(TV_NAME,
TV_PHONE, TV_EMAIL) VALUES ('{0}', '{1}', '{2}')", tv.THANHVIEN_NAME,
tv.THANHVIEN_PHONE, tv.THANHVIEN_EMAIL);
// Command (mặc định command type = text nên chúng ta khỏi fải làm gì
nhiều).
SqlCommand cmd = new SqlCommand(SQL, _conn);
// Query và kiểm tra
if (cmd.ExecuteNonQuery() > 0)
return true;
}
catch (Exception e)
{
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 100
}
finally
{
// Dong ket noi
_conn.Close();
}
return false;
}
///
/// Sửa thành viên
///
///
///
public bool suaThanhVien(DTO_ThanhVien tv)
{
try
{
// Ket noi
_conn.Open();
// Query string
string SQL = string.Format("UPDATE THANHVIEN SET TV_NAME =
'{0}', TV_PHONE = '{1}', TV_EMAIL = '{2}' WHERE TV_ID = {3}",
tv.THANHVIEN_NAME, tv.THANHVIEN_PHONE, tv.THANHVIEN_EMAIL,
tv.THANHVIEN_ID);
// Command (mặc định command type = text nên chúng ta khỏi fải làm gì
nhiều).
SqlCommand cmd = new SqlCommand(SQL, _conn);
// Query và kiểm tra
if (cmd.ExecuteNonQuery() > 0)
return true;
}
catch (Exception e)
{
}
finally
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 101
{
// Dong ket noi
_conn.Close();
}
return false;
}
///
/// Xóa thành viên
///
///
///
public bool xoaThanhVien(int TV_ID)
{
try
{
// Ket noi
_conn.Open();
// Query string - vì xóa chỉ cần ID nên chúng ta ko cần 1 DTO, ID là đủ
string SQL = string.Format("DELETE FROM THANHVIEN WHERE
TV_ID = {0})", TV_ID);
// Command (mặc định command type = text nên chúng ta khỏi fải làm gì
nhiều).
SqlCommand cmd = new SqlCommand(SQL, _conn);
// Query và kiểm tra
if (cmd.ExecuteNonQuery() > 0)
return true;
}
catch (Exception e)
{
}
finally
{
// Dong ket noi
_conn.Close();
}
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 102
return false;
}
}
}
5.1.4. Xây dựng các lớp xử lý nghiệp vụ
Bước này là bước xử lý business logic (Business layer).
Ở bước này, ta có thể lấy dữ liệu từ DAL về, xử lý ABC XYZ gì đó rồi trả về lại cho
GUI sử dụng. Hoặc khi update dữ liệu trên DB, GUI gửi data lên BUS và rồi ta xử lý
ABC XYZ gì đó cho data của chúng ta, rồi mới insert/update/delete chẳng hạn,
Vì app mình build là app đơn giản, nên mình chỉ cần gọi lên DAL và trả về tương ứng
cho GUI xài thui
Mình sẽ tạo BUS_ThanhVien.cs (Class file):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using DAL_QuanLy;
using DTO_QuanLy;
namespace BUS_QuanLy
{
public class BUS_ThanhVien
{
DAL_ThanhVien dalThanhVien = new DAL_ThanhVien();
public DataTable getThanhVien()
{
return dalThanhVien.getThanhVien();
}
public bool themThanhVien(DTO_ThanhVien tv)
{
return dalThanhVien.themThanhVien(tv);
}
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 103
public bool suaThanhVien(DTO_ThanhVien tv)
{
return dalThanhVien.suaThanhVien(tv);
}
public bool xoaThanhVien(int TV_ID)
{
return dalThanhVien.xoaThanhVien(TV_ID);
}
}
}
Chỉ đơn giản là gọi hàm và trả về thôi
5.1.5. Hiển thị dữ liệu và thao tác trên màn hình
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 104
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO_QuanLy;
using BUS_QuanLy;
namespace GUI_QuanLy
{
public partial class GUI_ThanhVien : Form
{
BUS_ThanhVien busTV = new BUS_ThanhVien();
public GUI_ThanhVien()
{
InitializeComponent();
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void btnAdd_Click(object sender, EventArgs e)
{
if (txtEmail.Text != "" && txtName.Text != "" && txtSDT.Text != "")
{
// Tạo DTo
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 105
DTO_ThanhVien tv = new DTO_ThanhVien(0, txtName.Text, txtSDT.Text,
txtEmail.Text); // Vì ID tự tăng nên để ID số gì cũng dc
// Them
if (busTV.themThanhVien(tv))
{
MessageBox.Show("Thêm thành công");
dgvTV.DataSource = busTV.getThanhVien(); // refresh datagridview
}
else
{
MessageBox.Show("Thêm ko thành công");
}
}
else
{
MessageBox.Show("Xin hãy nhập đầy đủ");
}
}
private void GUI_ThanhVien_Load(object sender, EventArgs e)
{
dgvTV.DataSource = busTV.getThanhVien(); // get thanh vien
}
private void btnEdit_Click(object sender, EventArgs e)
{
// Kiểm tra nếu có chọn table rồi
if (dgvTV.SelectedRows.Count > 0)
{
if (txtEmail.Text != "" && txtName.Text != "" && txtSDT.Text != "")
{
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 106
// Lấy row hiện tại
DataGridViewRow row = dgvTV.SelectedRows[0];
int ID = Convert.ToInt16(row.Cells[0].Value.ToString());
// Tạo DTo
DTO_ThanhVien tv = new DTO_ThanhVien(ID, txtName.Text,
txtSDT.Text, txtEmail.Text); // Vì ID tự tăng nên để ID số gì cũng dc
// Sửa
if (busTV.suaThanhVien(tv))
{
MessageBox.Show("Sửa thành công");
dgvTV.DataSource = busTV.getThanhVien(); // refresh datagridview
}
else
{
MessageBox.Show("Sửa ko thành công");
}
}
else
{
MessageBox.Show("Xin hãy nhập đầy đủ");
}
}
else
{
MessageBox.Show("Hãy chọn thành viên muốn sửa");
}
}
private void dgvTV_Click(object sender, EventArgs e)
{
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 107
// Lấy row hiện tại
DataGridViewRow row = dgvTV.SelectedRows[0];
// Chuyển giá trị lên form
txtName.Text = row.Cells[1].Value.ToString();
txtSDT.Text = row.Cells[2].Value.ToString();
txtEmail.Text = row.Cells[3].Value.ToString();
}
private void btnDelete_Click(object sender, EventArgs e)
{
// Kiểm tra nếu có chọn table rồi
if (dgvTV.SelectedRows.Count > 0)
{
// Lấy row hiện tại
DataGridViewRow row = dgvTV.SelectedRows[0];
int ID = Convert.ToInt16(row.Cells[0].Value.ToString());
// Xóa
if (busTV.xoaThanhVien(ID))
{
MessageBox.Show("Xóa thành công");
dgvTV.DataSource = busTV.getThanhVien(); // refresh datagridview
}
else
{
MessageBox.Show("Xóa ko thành công");
}
}
else
CHƯƠNG 5. XÂY DỰNG ỨNG DỤNG VỚI MÔ HÌNH ĐA TẦNG
KHOA CÔNG NGHỆ THÔNG TIN 108
{
MessageBox.Show("Hãy chọn thành viên muốn xóa");
}
}
}
}
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 109
CHƯƠNG 6. CRYSTAL REPORT
6.1 Crystal report
- .NET cung cấp CrystalReport như một phần của Project, chúng ta có thể thêm báo
cáo (report) bằng cách chọn Project – Add New Item – CrystalReport.
- CrystalReport cung cấp nhiều hình dạng cho phép hiển thị dữ liệu một cách trực quan
theo các mẫu được thiết kế sẵn
6.1.1. Tạo mới report
Bước 1: Từ một Project có sẵn, click phải chọn Add – New Item – chọn Crystal Report
Bước 2: Chọn Using the Report Wizard
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 110
Bước 3: Tạo kết nối với CSDL
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 111
Bước 4: Chọn kiểu báo cáo
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 112
Bước 5: Hoàn tất và chỉnh sửa báo cáo
6.1.2. Sử dụng crystal report để hiển thị report
- Sau khi thiết kế report thành công, chúng ta có thể tiếp tục thiết kế các report với
nhiều hình thức khác nhau. Tuy nhiên khi làm việc với C#, điều chúng ta quan tâm là
làm thế nào để tương tác với các report đã thiết kế với dữ liệu có chọn lọc, hình thức
chọn lọc từ CSDL nguồn.
- Trong phần này chúng ta sẽ tìm hiểu cách đọc và trình bày dữ liệu trên Crystal
Report Viewer bằng các hình thức như: trực tiếp từ DataSet, DataTable, XML v.v
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 113
6.1.3. Tạo nguồn dữ liệu cho report từ DataSet
chúng ta sẽ chọn Project Data > ADO.NET DataSets >
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 114
6.1.4. Tạo nguồn dữ liệu cho report từ nguồn CSDL
6.1.5. Lọc dữ liệu trên report
crystalreportviewer.SelectionFomula = "{filed cần lọc} = " + {Điều kiện};
ví dụ:
DataSet _ds = new DataSet();
string _strConnection = "server=.;database=Electronic;User Id
=sa;Password=sa;";
System.Data.SqlClient.SqlConnection _sqlCon = new
System.Data.SqlClient.SqlConnection(_strConnection);
System.Data.SqlClient.SqlCommand _sqlCom = new
System.Data.SqlClient.SqlCommand();
_sqlCom.CommandText = "SELECT * FROM [tbl_DanhMucSanPham]";
_sqlCom.Connection = _sqlCon;
System.Data.SqlClient.SqlDataAdapter _sqlAdater = new
System.Data.SqlClient.SqlDataAdapter(_sqlCom);
_sqlAdater.Fill(_ds);
_sqlAdater.Dispose();
CrystalReport7 _rpt7 = new CrystalReport7();
crystalReportViewer1.ReportSource = _rpt7;
crystalReportViewer1.SelectionFormula = "{_dt.DanhMuc_ID} = DM01";
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 115
6.1.6. Truyền tham số cho report
Có tham số:
6.1.7. Xuất report ra máy in
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 116
6.1.8. Xuất report ra tập tin
Crystal Report cho phép xuất dữ liệu từ báo cáo ra các định dạng khác như: Excel,
Word, PDF, HTML, Text v.v
Trong trường hợp này chúng ta tìm hiểu cách xuất dữ liệu từ Crystal Report ra PDF và
Excel.
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 117
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 118
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 119
6.1.9. Đóng gói project
Sau khi chúng ta xây dựng được một ứng dụng, để chạy được ứng dụng này trên một máy tính
khác, hoặc phân phối ứng dụng này đến nhiều người sử dụng khác, chúng ta cần phải đóng
gói project thành một chương trình cài đặt (Setup hoặc Install).
Bước 1: Tạo Project mới loại Setup and Deployment – Visual Studio Installer:
Bước 2: Trong khung liệt kê các kiểu project chọn Setup Wizard, bấm OK:
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 120
Bước 3: Bấm Next:
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 121
Bước 4: Bấm Next:
Bước 5: Bấm nút Add, sau đó tìm đến thư mục chứa file project QuanLySinhvien.sln, bấm
OK:
CHƯƠNG 6. CRYSTAL REPORT
KHOA CÔNG NGHỆ THÔNG TIN 122
Bước 6: Bấm nút Finish để hoàn tất:
KHOA CÔNG NGHỆ THÔNG TIN 123
TÀI LIỆU THAM KHẢO
TT Tên tác giả Tên sách – giáo trình NXB Năm XB
1
Phạm Hữu Khang C# 2005 – Lập trình cơ sở dữ
liệu – Tập 4 – Quyển 1
Lao động
xã hội
2009
2
Pham Hữu Khang C# 2005 0 Lập trình cơ sở dữ
liệu Report – Tập 4 – Quyển 2
Lao động
xã hội
2009
GIÁO TRÌNH
TÊN HỌC PHẦN
(LƯU HÀNH NỘI BỘ)
File đính kèm:
giao_trinh_mo_dun_xay_dung_ung_dung_windows_he_thong_thong_t.pdf

