Tìm kiếm trong danh mục (C#)

Mã nguồn và demo:
http://ifile.it/l725fdk

http://dot.net.vn/File.ashx/application=x-rar-compressed/464c2e9edc5a40caab21cba8237895a2-timkiem.rar/timkiem.rar

Tìm kiếm trong danh mục
Khi viết các phần mềm, thường chúng ta phải sử dụng danh mục. Tùy theo mục đích mà bạn có thể chọn control phù hợp.
Trong một số trường hợp, các control có sẵn phù hợp với ý đồ của mình. Nhưng có những lúc, sử dụng control có sẵn thật nhàm chán và hiệu quả không cao.
Với những mắc mớ đã gặp, tôi đã tự tạo cho mình một UserControl khá ưng ý, chia sẻ cùng các bạn, mong rằng nó sẽ có ích đối với một hay một số người nào đó .
Vì thời gian không có nhiều nên tôi chỉ giới thiệu sơ qua phần sử dụng (sẽ đủ tỉ mỉ để những người mới tập tành có thể ứng dụng ) còn phần sưu liệu tôi sẽ cố gắng làm vô một lúc nào đó. Tuy nhiên tôi vẫn đưa cả mã nguồn cho các bạn nghiên cứu và phát triển theo hướng của bạn.
(Hết phần râu ria )

Các thành phần của UserControl
– DataGridView(dgbCataLog): Dùng để hiển thị danh mục
– TextBox(txbma): Đây chỉ là một biến, không khai báo đối tượng, Trong dự án nó sẽ chỉ đến TextBox để nhập mã của 1 thành phần trong danh mục.
– TextBox(txbTen): như txbMa, nhưng chỉ đến "TextBox Tên"
các thành phần này tạo nên control có tên CatalogSearchBoxs. Các bạn thông cảm, Một phần vì hơi sinh sính đồ ngoại một phần vì đang cày bừa tiếng Anh nên đặt tên Tây Tây tý cho máu .
Ngoài những "ốc vít" ở trên thì trong userControl ni còn có một thành phần rất quan trọng là bảng chứa những dữ liệu cần tìm kiếm DataTable(tbSource). Và một số hàm thiết đặt các giá trị cho userControl:
publicvoid MSetCatalog(DataTable vtbSource, string vstrMa, string vstrTen, TextBox vtxbMa, TextBox vtxbTen, bool vbTimTheoMa)

{

(…)

}
vtbSource: cái bảng bạn cần tìm kiếm trong đó.
vstrMa và vstrTen: trong bảng bạn cần phải có ít nhất 2 cột và một cột là mục khóa chính, khi bạn gọi hàn thì gán biến vstrMa trùng với tên cột ni. tương ứng với biết vstrTen là cột là tên của sản phẩm (hay cấy chi đó, qua ví dụ bạn sẽ rõ hơn). vtxbMa và vtxbTen tương ứng với txbMa và txbTen đạ nói ở trên. Khi bạn đang tìm ở ô mã thì gán cho biến vvTimTheoMa bằng true, Nếu tìm theo tên thì là false.
ngoài ra còn một số hàm nạp chồng của hàm trên, bạn có thể mở rộng thêm tùy ý.

Sử dụng
Bạn thiết kế giao diện như thế này:

Thêm một quả Dataset như ri:

Bạn cần thêm userControl của bạn vô dự án:
Vô Project —> Add Reference…
Sau đó:

Chọn CatalogSearchBoxs.dll và nhấn OK
Bạn khai báo biến:
CatalogSearchBoxs.CatalogSearchBox ctlSearch
là biến toàn cục của frmMain. Trong hàn khởi tạo của frmMain bạn làm như sau:

public

frmMain()

{

ctlSearch = new CatalogSearchBoxs.CatalogSearchBox();
this.Controls.Add(ctlSearch);
InitializeComponent();

}

Phải add ctlSearch trước để nó luôn nổi lên trên cùng so với các control khác.

Bây giờ bạn tạo danh mục tình kiếm (Thường thì bạn lấy trong database, nhưng để cho gọn tôi tạo luôn trên project cho tiện)

private

void mKhoiTaoDanhMuc()

{

dtsXeCo =

newDataSetXeCo();
DataRow dtrAdd;
dtrAdd = dtsXeCo.XeCo.NewXeCoRow();
dtrAdd[
"Ma"] = "01";
dtrAdd[
"Ten"] = "Xe p";
dtsXeCo.XeCo.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.XeCo.NewXeCoRow();
dtrAdd[
"Ma"] = "02";
dtrAdd[
"Ten"] = "Xch l";
dtsXeCo.XeCo.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.XeCo.NewXeCoRow();
dtrAdd[
"Ma"] = "03";
dtrAdd[
"Ten"] = "Xe my";
dtsXeCo.XeCo.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.XeCo.NewXeCoRow();
dtrAdd[
"Ma"] = "04";
dtrAdd[
"Ten"] = "t";
dtsXeCo.XeCo.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.XeCo.NewXeCoRow();
dtrAdd[
"Ma"] = "05";
dtrAdd[
"Ten"] = "My bay";
dtsXeCo.XeCo.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.XeCo.NewXeCoRow();
dtrAdd[
"Ma"] = "06";
dtrAdd[
"Ten"] = "Tu ha";
dtsXeCo.XeCo.Rows.Add(dtrAdd);
dtsXeCo.XeCo.AcceptChanges();
dtrAdd = dtsXeCo.TaiXe.NewTaiXeRow();
dtrAdd[
"MaTaiXe"] = "001";
dtrAdd[
"TenTaiXe"] = "A lng X ";
dtsXeCo.TaiXe.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.TaiXe.NewTaiXeRow();
dtrAdd[
"MaTaiXe"] = "002";
dtrAdd[
"TenTaiXe"] = "V tng";
dtsXeCo.TaiXe.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.TaiXe.NewTaiXeRow();
dtrAdd[
"MaTaiXe"] = "003";
dtrAdd[
"TenTaiXe"] = "Lm Sung";
dtsXeCo.TaiXe.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.TaiXe.NewTaiXeRow();
dtrAdd[
"MaTaiXe"] = "004";
dtrAdd[
"TenTaiXe"] = "Tiu ci";
dtsXeCo.TaiXe.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.TaiXe.NewTaiXeRow();
dtrAdd[
"MaTaiXe"] = "005";
dtrAdd[
"TenTaiXe"] = "Gia Gia Ct Lng";
dtsXeCo.TaiXe.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.TaiXe.NewTaiXeRow();
dtrAdd[
"MaTaiXe"] = "006";
dtrAdd[
"TenTaiXe"] = "Chu du";
dtsXeCo.TaiXe.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.TaiXe.NewTaiXeRow();
dtrAdd[
"MaTaiXe"] = "007";
dtrAdd[
"TenTaiXe"] = "Thy Kiu";
dtsXeCo.TaiXe.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.TaiXe.NewTaiXeRow();
dtrAdd[
"MaTaiXe"] = "008";
dtrAdd[
"TenTaiXe"] = "Thy vn";
dtsXeCo.TaiXe.Rows.Add(dtrAdd);
dtrAdd = dtsXeCo.TaiXe.NewTaiXeRow();
dtrAdd[
"MaTaiXe"] = "009";
dtrAdd[
"TenTaiXe"] = "Madona";
dtsXeCo.TaiXe.Rows.Add(dtrAdd);
dtsXeCo.TaiXe.AcceptChanges();

}

Bạn gọi hàm ni khi Load from.

Trong sự kiện Enter của mỗi textBox bạn cần cài đặt cho Control của bạn:

private

void txbXeCoMa_Enter(object sender, EventArgs e)

{

ctlSearch.MSetCatalog(dtsXeCo.XeCo,

"Ma", "Ten", txbXeCoMa, txbXeCoTen, true, 200);

}
privatevoid txbXeCoTen_Enter(object sender, EventArgs e)

{

ctlSearch.MSetCatalog(dtsXeCo.XeCo,

"Ma", "Ten", txbXeCoMa, txbXeCoTen, false);

}
privatevoid txbTayLaiMa_Enter(object sender, EventArgs e)

{

ctlSearch.MSetCatalog(dtsXeCo.TaiXe,

"MaTaiXe", "TenTaiXe", txbTayLaiMa, txbTayLaiTen, true, 200);

}
privatevoid txbTayLaiTen_Enter(object sender, EventArgs e)

{

ctlSearch.MSetCatalog(dtsXeCo.TaiXe,

"MaTaiXe", "TenTaiXe", txbTayLaiMa, txbTayLaiTen, false, 200);

}

OK
Bây giờ ta có thể thử một tý
F5 nào:

Rất sạch sẽ, không có chi phải không nào .
giờ bạn thử khỏ một phím coi:

bạn có thể dùng phím mũi tên để chọn rồi nhấn Enter, nếu có mục phù hợp thì control sẽ tự điền thông tin cần thiết vào 2 TextBox mã và TextBox tên sau đó focus sẽ nhảy đến mục nhập khác, nếu không có mục phù hợp thì nó sẽ nhảy sang mục lựa chọn theo tên:

Hay

tiêu chuẩn lọc những mục phù hợp bạn có thể coi ảnh để… đoán hoặc coi trong source, tui buồn ngủ rồi

Deploy window application using Visual Studio

Công đoạn cuối cùng của việc phát triển phần mềm là đóng gói và triển khi ứng dụng, bài viết này mình sẻ hướng dẫn mọi người cách tạo file setup sử dụng Visual Studio (VS).
Để cho đơn giản mình tạo 1 project helloworld và tạo file setup cho project này.
Từ VS mình tạo 1 blank solution bao gồm 1 window application và 1 setup project.


Để tạo setup project chúng ta click chuột phải solution chọn add new project…

Sau khi setup project đả được thêm vào, chúng ta tiến hành add output project cho setup project, tức là setup project sẻ chọn project để cài đặt.
Click chuột phải vào helloworldSetup project → Add Project Output….


Hộp thoại xuất hiện chúng ta chọn HelloWorld window application project.
Bước tiếp theo là Add custom action.
Click chuột phải helloworldSetup project → View → Custom Action


Then add Custom Action cho Install, Commit, RollBack va UnInstall.


Xong, giờ chuyển qua chế độ Release và tiến hành build, sau khi build chúng ta có 2 file setup trong thư mục Release của helloworldSetup project.
Run file setup lên và tiến hành cài đặt.
Chú ý: để thay đổi thông tin như thư mục hiện hành, tên hãng, tác giả, chúng ta có thể thay đổi những thông tin trong hộp thoại property của helloworldSetup project.


Màng hình cài đặt

Nhúng reCaptcha vào ASP.NET

reCaptcha là 1 dịch vụ giúp chúng ta có thể chống lại bot, và những submit không phải do con người (do engine).
Bài viết này mình sẻ hướng dẫn mọi người cách nhúng reCaptcha vào ASP.NET sử dụng both C# và VB.NET.
Các bước thực hiện:
1. Sign up để lấy private và public key
https://admin.recaptcha.net/accounts/signup/
2. Tạo key
Vào https://admin.recaptcha.net/recaptcha/createsite/ và nhập domain name, sau đó chúng ta sẻ có private và public key.

3. Download thư viện reCaptcha
Phiên bản mới nhất có thể được download từ google code.
4. Tạo 1 ứng dụng ASP.NET C# or VB.NET.
5. Add Recaptcha.dll vào toolbox và kéo thả vào WebForm, tiếp theo dán 2 giá trị private và public key từ bước 2.
6. Kéo button và code cho sự kiện click, 1 label notify thông báo thành công or not.
C#

   1:  protected void ButtonSubmit_Click(object sender, EventArgs e)
   2:   
   3:      {
   4:   
   5:  if (Page.IsValid)
   6:   
   7:          {
   8:   
   9:              LabelResult.Visible = true;
  10:   
  11:              LabelResult.ForeColor = System.Drawing.Color.Green;
  12:   
  13:              LabelResult.Text = "Captcha match!";
  14:   
  15:          }
  16:   
  17:  else
  18:   
  19:          {
  20:   
  21:              LabelResult.Visible = true;
  22:   
  23:              LabelResult.ForeColor = System.Drawing.Color.Red;
  24:   
  25:              LabelResult.Text = "Captcha invalid.";
  26:   
  27:          }
  28:   
  29:      }

VB.NET

   1:  Protected Sub ButtonSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonSubmit.Click
   2:   
   3:  If Page.IsValid Then
   4:   
   5:  LabelResult.Visible = True
   6:   
   7:  LabelResult.ForeColor = Drawing.Color.Green
   8:   
   9:  LabelResult.Text = "Captcha match!"
  10:   
  11:  Else
  12:   
  13:  LabelResult.Visible = True
  14:   
  15:  LabelResult.ForeColor = Drawing.Color.Red
  16:   
  17:  LabelResult.Text = "Captcha invalid."
  18:   
  19:  End If
  20:   
  21:  End Sub

Và đây là kết quả, khi nhập đúng giá trị captcha

Và đây là kết quả, khi nhập sai giá trị captcha

Chúc các bạn thành công!