Trang chủ » CSharp » Tìm kiếm trong danh mục (C#)

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

Advertisements

Bình luận

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s