12/12/2018
Lập trình Ứng dụng quản lý
Validation, Multithreading, Ơn tập
Nội dung
Validation
Multithreading
Ôn tập
Cấu trúc bài thi lý thuyết
1
12/12/2018
Nội dung
Validation
Multithreading
Ôn tập
Cấu trúc bài thi lý thuyết
Validation
Dữ liệu nhập cần phải được kiểm soát tính hợp lệ
trước khi lưu xuống database để đảm bảo tính
tồn vẹn dữ liệu.
Q trình kiểm tra tính hợp lệ của dữ liệu nhập
gọi là validation.
Tùy thuộc vào kiến trúc của ứng dụng để xây
dựng cơ chế validation phù hợp (nơi thực hiện,
mức độ,…)
2
12/12/2018
Validation Events
Validation events được thiết kế để cho phép
kiểm tra thông tin ngay khi được nhập, hơn là
chờ đợi để gửi toàn bộ biểu mẫu (form). Điều
này là rất hữu ích vì:
Người dùng sẽ n tâm gửi biểu mẫu vì khả năng
phát sinh lỗi đã được kiểm sốt.
Người dùng có thể nhập nhiều mẩu dữ liệu khơng
hợp lệ vào cùng một thời điểm. Nếu không kiểm tra
dữ liệu cho đến khi biểu mẫu được gửi đi, chương
trình sẽ phải tìm ra cách nào đó để thơng báo tất cả
các lỗi cùng một lúc.
Vào thời điểm người dùng gửi biểu mẫu, họ có thể
đã quên về trường cụ thể mà họ nhập khơng chính
xác.
Validation Event Sequence
Khi điều hướng từ control này sang control khác,
một chuỗi event sẽ xảy ra. Ví dụ chuyển từ TextBox1
sang TextBox2 bằng cách nhấn tab thì các event
xảy ra như sau
Leave (TextBox1)
Enter (TextBox2)
LostFocus (TextBox1)
GotFocus (TextBox2)
Thực hiện validation với event LostFocus ?
Khi điều hướng bằng mouse:
LostFocus (TextBox1)
Leave (TextBox1)
Enter (TextBox2)
GotFocus (TextBox2)
3
12/12/2018
Validating events
Trong .NET, event xảy ra khi điều hướng từ
TextBox1 sang TextBox2
Leave (TextBox1)
Enter (TextBox2)
Validating (TextBox1)
Validating (TextBox2)
LostFocus (TextBox1)
GotFocus (TextBox2)
Validated event cho phép phản hồi dữ liệu đã
nhập chính xác.
Validating event cho phép thực hiện xác minh
dữ liệu và kiểm soát chuyển focus control.
CausesValidation property
Validation chỉ diễn ra khi source control có thiết
lập property CausesValidation thành true. Ngồi
ra, Validation sẽ khơng xảy ra cho đến khi sự
thay đổi focus vào một control cũng có property
CausesValidation được đặt thành true. Nếu một
trong hai có một CausesValidation của false,
các event validation bị tạm dừng, nhưng các
event khác (như Enter và Leave) vẫn xảy ra.
Bảng sau cho thấy một số ví dụ về những gì có
thể xảy ra khi điều hướng từ control này sang
control khác.
4
12/12/2018
.NET Validation
Source Control
Destination Control
Result
CousesValidation = false
Không xảy ra
Validation code bị bỏ qua
CousesValidation = true
CousesValidation = true
Validation được thực hiện
cho source control
CousesValidation = true
CousesValidation = false
Validation bị hoãn lại cho
đến khi sự thay đổi focus
vào một
CausesValidation. Vào
thời điểm này, tất cả các
control cần phải được
valid theo thứ tự cho đến
khi một control được tìm
thấy với dữ liệu nhập
khơng hợp lệ và q trình
bị hủy bỏ.
Ví dụ
private void TxtFN_Validating(object sender, CancelEventArgs e)
{
if (((TextBox)sender).Text.Length == 0)
{
MessageBox.Show("You must enter a first and last name.",
"Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Warning);
e.Cancel = true;
}
}
5
12/12/2018
Vấn đề đóng form
private void BtnCancel_Click(object sender, EventArgs e)
{
AutoValidate = AutoValidate.Disable;
Close();
}
Giải quyết vấn đề
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
{
// If e.Cancel is true, the cancel flag has been set by a validation routine.
if (e.Cancel)
{
DialogResult result = MessageBox.Show("Do you wish to close the form?",
"Errors found", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
e.Cancel = false;
}
}
}
6
12/12/2018
ErrorProvider
Sử dụng MessageBox (Dialog) để thông báo lỗi
đến người dùng là giải pháp không tốt, làm giảm
chất lượng trải nghiệm ứng dụng.
Cần có hướng tiếp cận thơng báo lỗi đến người
dùng thân thiện hơn, mục tiêu vừa không làm
gián đoạn trải nghiệm người dùng, vừa đưa được
thông tin lỗi sớm và chính xác nhất (vị trí và loại
lỗi).
.NET cung cấp control ErrorProvider để giúp hiển
thị thông tin lỗi uyển chuyển hơn.
Sử dụng ErrorProvider
private void TxtFN_Validating(object sender, CancelEventArgs e)
{
Control ctrl = (Control)sender;
if (ctrl.Text.Length == 0)
{
errorProviderMain.SetError(ctrl, "You must enter a first and last name.");
e.Cancel = true;
}
else
{
errorProviderMain.SetError(ctrl, "");
}
}
7
12/12/2018
Kiểm tra lỗi
private void BtnOK_Click(object sender, EventArgs e)
{
if (errorProviderMain.GetError(txtFN).Length == 0 &&
errorProviderMain.GetError(txtLN).Length == 0)
{
Close();
}
else
{
MessageBox.Show("You still have invalid input.",
"Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
MaskedTextBox
Properties
Mask
PromptChar
TextMaskFormat
…
Events
TypeValidationCompleted
MaskInputRejected
…
8
12/12/2018
Nội dung
Validation
Multithreading
Ôn tập
Cấu trúc bài thi lý thuyết
Mục tiêu của MultiThreading
Giúp cho client đáp ứng tốt hơn (more
responsive).
Hoàn thành nhiều tác vụ cùng lúc.
Giúp cho một ứng dụng máy chủ có khả năng mở
rộng.
9
12/12/2018
Ví dụ
Ứng dụng với tác vụ tốn thời gian hoàn thành
Áp dụng Multithreading
10
12/12/2018
Nội dung
Validation
Multithreading
Ôn tập
Cấu trúc bài thi lý thuyết
Cơ bản
Kiến thức về .NET (chú trọng ngôn ngữ C#) về
các vấn đề
Định nghĩa biến, kiểu dữ liệu
Khai báo, định nghĩa struct, class
Phương thức và các kiểu truyền tham số
Xử lý chuỗi, định dạng xuất,…
Lập trình WinForm
Khái niệm, khai báo và sử dụng events
Xây dựng giao diện cơ bản và xử lý
11
12/12/2018
Xử lý dữ liệu
Truy vấn LINQ cơ bản
Các phương thức hỗ trợ trong Enumerable
Query syntax và Lambda syntax trên objects.
Sử dụng LINQ to SQL
Truy vấn theo yêu cầu
Tương tác với database (thêm, xóa, sửa)
Các dữ liệu quan hệ
Nội dung
Validation
Multithreading
Ôn tập
Cấu trúc bài thi lý thuyết
12
12/12/2018
Thi lý thuyết
Thời gian làm bài: 90 phút
Không sử dụng tài liệu
Có khoảng 5 câu hỏi cho các lĩnh vực ôn tập.
Phần viết code không quan trọng chính xác hồn
tồn từ khóa mà chỉ cần rõ ý mỗi dịng code mục
đích thực hiện điều gì.
13