• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Tìm kiếm theo mã hàng

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Moderators: tungblt, vuathongtin

zeusdatinh

Tìm kiếm theo mã hàng

Postby zeusdatinh » Sun 31/05/2009 2:54 pm

Em có một bảng tblHangHoa(MaHang,TenHang,NhaSanXuat).Trong FrmHangHoa em đã làm được những nút như : Thêm Mới,Chỉnh Sửa, Xóa bỏ.Bây giờ em muốn thiết kế một chức năng tìm kiếm theo Mã Hàng thì viết như nào,Pro nào thạo vấn đề này chỉ cho em vài cách để em làm nhé!Em cảm ơn nhiều!



User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

Re: Tìm kiếm theo mã hàng

Postby tungcan5diop » Sun 31/05/2009 7:47 pm

zeusdatinh wrote:Em có một bảng tblHangHoa(MaHang,TenHang,NhaSanXuat).Trong FrmHangHoa em đã làm được những nút như : Thêm Mới,Chỉnh Sửa, Xóa bỏ.Bây giờ em muốn thiết kế một chức năng tìm kiếm theo Mã Hàng thì viết như nào,Pro nào thạo vấn đề này chỉ cho em vài cách để em làm nhé!Em cảm ơn nhiều!

mỗi Mã Hàng sẽ có một Tên Hàng tương ứng,gợi ý bạn có thể tạo một Combobox gồm 2 cột Tên Hàng,Năm Sản Xuất.bạn có thể tìm theo 2 từ khóa này
một DataGridView thể hiện nội dung của bảng tblHangHoa..môt Combobox gồm 2 cột Tên Hàng,Năm Sản Xuất,mỗi lần người dùng nhập một trong 2 từ khóa như trên thì bạn thể hiện nội dung lọc đươc trên lưới..chủ yếu là ý tưởng thôi.code thì đơn giản
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

zeusdatinh

Re: Tìm kiếm theo mã hàng

Postby zeusdatinh » Mon 01/06/2009 8:48 am

Oai oái!Thế mà em code chẳng thấy đơn giản chút nào cả!Vì em mới làm lần đầu!Đúng là phải có ý tưởng thì mới làm được.Bác TungCan hướng dẫn em viết code đi!

User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

Re: Tìm kiếm theo mã hàng

Postby tungcan5diop » Mon 01/06/2009 10:45 am

về cách làm bạn tham khảo theo như hình đây xem có được ko?
filter.JPG

ComboBox là để người dùng chọn Filter theo cái gì,còn Textbox là để người dùng nhập nội dung ứng với từ khóa đó,cái lưới thể hiện thông tin khi lọc.
mình chỉ đưa code mẫu bạn tham khảo rồi làm theo ý của bạn nha
p/s:mình cũng bình thường thôi,bạn ko cần phải nói như vậy đâu,làm ơn edit lại câu nói của bạn ở bài"ComboBox",thanks

Code: Select all

  1. Private Sub txtNoiDung_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNoiDung.TextChanged
  2.   --cboLoc-->là cái ComboBox
  3. --dtTienLUong-->là cái datatable mà bạn dùng làm source của lưới,mình sẽ lọc trên source của lưới mà
  4. --txtNoiDung-->cái textbox
  5.         Select Case Me.cboLoc.SelectedIndex
  6.             Case 0
  7.                 '-makh
  8.                 dtTienLUong.DefaultView.RowFilter = "t_makh like '%" + Me.txtNoiDung.Text.Trim + "%' "
  9.             Case 1
  10.                 '--tên giờ
  11.                 dtTienLUong.DefaultView.RowFilter = "t_tenluongtp like '%" + Me.txtNoiDung.Text.Trim + "%' "
  12.         End Select
  13.         If txtNoiDung.Text.Trim = "" Then dtTienLUong.DefaultView.RowFilter = Nothing
  14.         End Sub
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

zeusdatinh

Re: Tìm kiếm theo mã hàng

Postby zeusdatinh » Mon 01/06/2009 11:25 am

Thank bác nhiều!ý em vui tính em nói thế mà!Vì đọc bài bác làm thế vừa dễ hiểu và rất logic,code của bác hay nói chính xác hơn là những ai lọt vào top 10 thành viên thì thôi rồi!Cái dtTienluong chính là DataGridview đó phải không ạ?

User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

Re: Tìm kiếm theo mã hàng

Postby tungcan5diop » Tue 02/06/2009 12:10 pm

zeusdatinh wrote:Thank bác nhiều!ý em vui tính em nói thế mà!Vì đọc bài bác làm thế vừa dễ hiểu và rất logic,code của bác hay nói chính xác hơn là những ai lọt vào top 10 thành viên thì thôi rồi!Cái dtTienluong chính là DataGridview đó phải không ạ?

hix sao bạn ko đọc kỹ đoạn code đó mình có chú thích rồi mà
dtTienluong -->là DataTable làm source của lưới chứ ko phải DataGridView..ban đã làm thử chưa?
DataTable của lưới thay đổi thì Datasource của lưới cũng thay đổi theo àh
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

zeusdatinh

Re: Tìm kiếm theo mã hàng

Postby zeusdatinh » Tue 02/06/2009 12:45 pm

Bởi vì mô hình form của em nó như này.Em post lên bác góp ý cho em với nhá!Với form của em thì em muôn tạo một chức năng tìm kiếm luôn lên trên form đó.Như bác đưa ra là phải tạo một form rieng cho việc tìm kiếm đúng không ạh?Và cho em hỏi thêm nếu như form của em mà làm luôn việc tìm kiếm thì sau khi tìm xong thì dữ liệu có thể hiển thị ngay lên DataGrid cũ có được không ạh?
Đây là hình form em làm với dữ liệu trong SQL là tblHangBan:
Vậy với form này bác thử cho em lời khuyên là nên đặt chức năng tỉm kiếm như thế nào!Em cảm ơn bác nhìu!
Attachments
untitled.JPG

zeusdatinh

Re: Tìm kiếm theo mã hàng

Postby zeusdatinh » Tue 02/06/2009 1:40 pm

tungcan5diop wrote:về cách làm bạn tham khảo theo như hình đây xem có được ko?
The attachment filter.JPG is no longer available

ComboBox là để người dùng chọn Filter theo cái gì,còn Textbox là để người dùng nhập nội dung ứng với từ khóa đó,cái lưới thể hiện thông tin khi lọc.
mình chỉ đưa code mẫu bạn tham khảo rồi làm theo ý của bạn nha
p/s:mình cũng bình thường thôi,bạn ko cần phải nói như vậy đâu,làm ơn edit lại câu nói của bạn ở bài"ComboBox",thanks

Code: Select all

  1. Private Sub txtNoiDung_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNoiDung.TextChanged
  2.   --cboLoc-->là cái ComboBox
  3. --dtTienLUong-->là cái datatable mà bạn dùng làm source của lưới,mình sẽ lọc trên source của lưới mà
  4. --txtNoiDung-->cái textbox
  5.         Select Case Me.cboLoc.SelectedIndex
  6.             Case 0
  7.                 '-makh
  8.                 dtTienLUong.DefaultView.RowFilter = "t_makh like '%" + Me.txtNoiDung.Text.Trim + "%' "
  9.             Case 1
  10.                 '--tên giờ
  11.                 dtTienLUong.DefaultView.RowFilter = "t_tenluongtp like '%" + Me.txtNoiDung.Text.Trim + "%' "
  12.         End Select
  13.         If txtNoiDung.Text.Trim = "" Then dtTienLUong.DefaultView.RowFilter = Nothing
  14.         End Sub

Bác Tungcan cho em hỏi chút là dữ liệu MaHang hoặc TenHang ở hộp thoại Combobox thì mình add theo Data Source như hình dưới đây phải không hay là tự add bằng tay vào.Nhưng nếu add bằng tay thì "thủ công nông dân quá"!Vây mà add theo Data Source thì lại không được!bác chỉ em với!
Attachments
ccc.JPG

User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

Re: Tìm kiếm theo mã hàng

Postby tungcan5diop » Tue 02/06/2009 2:02 pm

1.bên dưới DataGridView bạn có thể thiết kế một cái combobox(chọn điều kiện tìm kiếm),textbox(nhập),button(tìm kiếm)
về ý là như vậy bạn làm thử xem sao,code mẫu thì mình đã đưa bạn tham khảo rồi
2.hix tất nhiên là add bằng Datasource rồi,chỉ cần bạn viết một cái hàm đổ datasource vào combobox là xong thôi trong form Load gọi hàm sau

Code: Select all

  1. Sub loadCombo()
  2.         Dim dt As New DataTable
  3.         Dim mCon As New SqlClient.SqlConnection(sConnectString)
  4.         '--sConnectString:là chuỗi kết nối của bạn
  5.         mCon.Open()
  6.  
  7.         Dim cmd As New SqlClient.SqlCommand("select tenhang,mahang from dmhanghoa", mCon)
  8.         Dim dad As New SqlClient.SqlDataAdapter(select tenhang,mahang from dmhanghoa, sConnectString)
  9.         dad.Fill(dt)
  10.         Me.ComboBox1.DataSource = dt
  11.         Me.ComboBox1.DisplayMember = "tenhang"
  12.         Me.ComboBox1.ValueMember = "mahang"
  13.         dad.Dispose()
  14.     End Sub
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

zeusdatinh

Re: Tìm kiếm theo mã hàng

Postby zeusdatinh » Tue 02/06/2009 3:05 pm

Em code như này:

Code: Select all

  1. Sub comboload()
  2.         Dim dt As New DataTable
  3.         Dim strconn As String = System.Configuration.ConfigurationManager.ConnectionStrings("QuanLyBanHang.My.MySettings.QuanLyBH").ToString()
  4.         Dim sqlconn As New SqlConnection(strconn)
  5.         sqlconn.Open()
  6.         Dim strcomm As New SqlCommand("Select MaHang,TenHang From tblHangHoa", sqlconn)
  7.         Dim sqlcomm As New SqlDataAdapter(strcomm)
  8.         sqlcomm.Fill(dt)
  9.         Me.Cbtimkiem.DataSource = dt
  10.         Me.Cbtimkiem.DisplayMember = "IDtutang"
  11.         Me.Cbtimkiem.ValueMember = "MaHang"
  12.         sqlcomm.Dispose()
  13.     End Sub

Code như thế vẫn chạy bt và bác có thể cho em hỏi chút là :Thuộc tính DisplayMember của Cbtimkiem sao lại không hiện lên số ID mà lại chỉ hiện lên mỗi MaHang thôi ạ?Hay nó chỉ hiện được một trong hai trường đó?
Hình như code bác TungCan viết trên VB 6.0 phải không ah?
Còn cái --dtTienLUong có phải là bảng Hàng hóa trong CSDl không ah?Em vẫn không biết đó là đối tượng gì !Thử mấy cái vẫn khôgn co thuộc tính DefaultView.RowFilter như bác làm!Bác chỉ em với!

tamnv
Thành viên năng nổ
Thành viên năng nổ
Posts: 56
Joined: Thu 30/04/2009 10:52 pm

Re: Tìm kiếm theo mã hàng

Postby tamnv » Tue 02/06/2009 5:56 pm

Hộ TungCan một tý: Đặt cbtimkiem bên phải txtmahang. Trong sự kiện cbtimkiem.SelectedIndexChanged viết
Me.txtMaHang.Text = Me.cbotimkiem.SelectedValue
Như vậy bấm vào cái Tên hàng nào là tự nó tìm mã đặt vào txtMaHang

Tiện đây xin hỏi các bạn: trong TXT có sự kiện nào mà vừa load form, hoặc next... nó đã thực hiện giống như sự kiện "Refesh" trong các ngôn ngữ khác.

User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

Re: Tìm kiếm theo mã hàng

Postby tungcan5diop » Tue 02/06/2009 9:23 pm

zeusdatinh wrote:Em code như này:

Code: Select all

  1. Sub comboload()
  2.         Dim dt As New DataTable
  3.         Dim strconn As String = System.Configuration.ConfigurationManager.ConnectionStrings("QuanLyBanHang.My.MySettings.QuanLyBH").ToString()
  4.         Dim sqlconn As New SqlConnection(strconn)
  5.         sqlconn.Open()
  6.         Dim strcomm As New SqlCommand("Select MaHang,TenHang From tblHangHoa", sqlconn)
  7.         Dim sqlcomm As New SqlDataAdapter(strcomm)
  8.         sqlcomm.Fill(dt)
  9.         Me.Cbtimkiem.DataSource = dt
  10.         Me.Cbtimkiem.DisplayMember = "IDtutang"
  11.         Me.Cbtimkiem.ValueMember = "MaHang"
  12.         sqlcomm.Dispose()
  13.     End Sub

Code như thế vẫn chạy bt và bác có thể cho em hỏi chút là :Thuộc tính DisplayMember của Cbtimkiem sao lại không hiện lên số ID mà lại chỉ hiện lên mỗi MaHang thôi ạ?Hay nó chỉ hiện được một trong hai trường đó?
Hình như code bác TungCan viết trên VB 6.0 phải không ah?
Còn cái --dtTienLUong có phải là bảng Hàng hóa trong CSDl không ah?Em vẫn không biết đó là đối tượng gì !Thử mấy cái vẫn khôgn co thuộc tính DefaultView.RowFilter như bác làm!Bác chỉ em với!

thay

Code: Select all

  1. Me.Cbtimkiem.DisplayMember = "IDtutang"

bằng cái này

Code: Select all

  1. Me.Cbtimkiem.DisplayMember = "MaHang"

DisPlayMember-->giá trị thể hiện trên Combobox
ValueMember-->giá tri khi mình Selected-->cái này cần thiết để where trong CSDL
mình chỉ biết VB.net ko biết Vb6
khi bạn load dữ liệu trên DataGridView bạn sẽ Fill vào 1 DataTable đó chính là
dtTienLUong
bạn chỉ cần lọc trên DataTable theo cách mình hướng dẫn là OK thôi
Tiện đây xin hỏi các bạn: trong TXT có sự kiện nào mà vừa load form, hoặc next... nó đã thực hiện giống như sự kiện "Refesh" trong các ngôn ngữ khác.
ko hiểu câu hỏi
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

tamnv
Thành viên năng nổ
Thành viên năng nổ
Posts: 56
Joined: Thu 30/04/2009 10:52 pm

Re: Tìm kiếm theo mã hàng

Postby tamnv » Tue 02/06/2009 11:00 pm

Ví dụ trong Hhx_ctu( ma_hhoa........). Trong Dm_hhoa( ma_hhoa, Ten_hhoa...). Trên giao diện của Form thì có txt mã hàng hóa, và cbo tên hàng hóa. Vì vậy khi cập nhật dữ liệu, trong sự kiện "Lostfocut" mình viết (tựa ngôn ngữ VB6)
" Select * from dm_hhoa where ma_hhoa = txtma_hhoa"
....
cboTenHhoa = dm_hhoa!ten_hhoa
....
như vậy khi viết hóa đơn viết xong mã hàng hóa, thì cboTenHhoa có tên hàng hóa, nhưng khi Next Đi next lại thì cboTenhhoa không còn dữ liệu nữa. Vậy ý tôi muốn hỏi đặt lệnh Select trên vào sự kiện nào để khi di chuyển hóa đơn thì CboTenHhoa luôn tên hàng hóa. (Trong FOXPRO tôi đặt trong câu lệnh trên vào sự kiện txtma_hhoa.refesh)

zeusdatinh

Re: Tìm kiếm theo mã hàng

Postby zeusdatinh » Wed 03/06/2009 3:34 pm

Không làm được thì không yên,mà làm mãi không được!Để em xem lại!Nhất định sẽ làm được cái này.Hỏi đi hỏi lại chỉ làm thêm các bác "Khó chịu"!Thanhk các bác nhiều!

linux_nd
Thành viên chính thức
Thành viên chính thức
Posts: 14
Joined: Tue 03/06/2008 1:11 pm

Re: Tìm kiếm theo mã hàng

Postby linux_nd » Sun 23/08/2009 10:42 pm

Mình muốn lấy dữ liệu từ combobox mình đã dùng

Code: Select all

  1. dim str as string = combobox1.selectedvalue.tostring()

nhưng nó toàn báo lỗi. Các bạn giúp mình với

User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

Re: Tìm kiếm theo mã hàng

Postby tungcan5diop » Mon 24/08/2009 12:08 pm

linux_nd wrote:Mình muốn lấy dữ liệu từ combobox mình đã dùng

Code: Select all

  1. dim str as string = combobox1.selectedvalue.tostring()

nhưng nó toàn báo lỗi. Các bạn giúp mình với

nếu báo lỗi thì bạn post cái lỗi đó lên đây .mọi người mới góp ý cho bạn được chứ,chứ nói vậy thì ai mà biết,và để nhanh chóng bạn có thể làm một cái form test về vấn đề của bạn,post cái ví dụ đó lên. :D
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

vinaghost
Thành viên chính thức
Thành viên chính thức
Posts: 27
Joined: Mon 28/04/2008 1:07 am

Re: Tìm kiếm theo mã hàng

Postby vinaghost » Fri 28/08/2009 7:10 am

Code: Select all

  1.  
  2. Me.Cbtimkiem.DisplayMember = "IDtutang"
  3. Me.Cbtimkiem.ValueMember = "MaHang"
  4.  

thay bằng

Code: Select all

  1.  
  2. Me.Cbtimkiem.DisplayMember = "TenHang"
  3. Me.Cbtimkiem.ValueMember = "MaHang"
  4.  


Khi không select được tí dữ liệu nào để cho combobox xơi thì combobox.SelectedValue=null, mà null.ToString() ~~> lỗi ngay và luôn ~~> cho try/catch bao bọc chỗ này để phòng ngừa.

ngovanthuc
Posts: 4
Joined: Wed 02/06/2010 8:02 am

Re: Tìm kiếm theo mã hàng

Postby ngovanthuc » Wed 09/01/2019 9:48 pm

Về mặt phương pháp và code để làm thì với công nghệ giờ không có gì là khó đối với việc tìm kiếm khi dùng textchange
Nhưng có một vấn đề mà textchange chưa giải được ( trường hợp buộc phải dùng textchange) đó là:
khi dữ liệu có hàng trăm ngàn bản ghi với yêu cầu là tìm kiếm gần đúng với số liệu chính xác mới nhất thì nó chạy như xe rùa luôn.
có bác nào có phương án hay giải quyết không? chỉ em với à

ncxn
Thành viên năng nổ
Thành viên năng nổ
Posts: 62
Joined: Thu 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 8 times

Re: Tìm kiếm theo mã hàng

Postby ncxn » Thu 10/01/2019 10:09 am

Mấy cái lookup này chỉ dành cho danh mục thường là các đối tượng ít thay đổi ( ví dụ danh mục sản phẩm/ khách hàng/ nhân viên/ tài sản ) -> mấy cái này nhiều lắm là khoản 10k record.
Còn khi tìm kiếm dữ liệu động ( orders/ sales detail/ ...) thì ai dùng textchange?


Return to “Visual Basic .NET và C# (VB.NET & C#)”

Who is online

Users browsing this forum: No registered users and 3 guests