• 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#

Điều hành viên: tungblt, vuathongtin

zeusdatinh

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

Gửi bàigửi bởi zeusdatinh » CN 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!



Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

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

Gửi bàigửi bởi tungcan5diop » CN 31/05/2009 7:47 pm

zeusdatinh đã viết: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

Gửi bàigửi bởi zeusdatinh » T.Hai 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!

Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

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

Gửi bàigửi bởi tungcan5diop » T.Hai 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

Mã: Chọn hết

  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

Gửi bàigửi bởi zeusdatinh » T.Hai 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 ạ?

Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

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

Gửi bàigửi bởi tungcan5diop » T.Ba 02/06/2009 12:10 pm

zeusdatinh đã viết: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

Gửi bàigửi bởi zeusdatinh » T.Ba 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!
Tập tin đính kèm
untitled.JPG

zeusdatinh

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

Gửi bàigửi bởi zeusdatinh » T.Ba 02/06/2009 1:40 pm

tungcan5diop đã viết:về cách làm bạn tham khảo theo như hình đây xem có được ko?
Tập tin đính kèm filter.JPG hiện tại không còn trên máy chủ

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

Mã: Chọn hết

  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!
Tập tin đính kèm
ccc.JPG

Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

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

Gửi bàigửi bởi tungcan5diop » T.Ba 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

Mã: Chọn hết

  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

Gửi bàigửi bởi zeusdatinh » T.Ba 02/06/2009 3:05 pm

Em code như này:

Mã: Chọn hết

  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ổ
Bài viết: 56
Ngày tham gia: T.Năm 30/04/2009 10:52 pm

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

Gửi bàigửi bởi tamnv » T.Ba 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.

Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

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

Gửi bàigửi bởi tungcan5diop » T.Ba 02/06/2009 9:23 pm

zeusdatinh đã viết:Em code như này:

Mã: Chọn hết

  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

Mã: Chọn hết

  1. Me.Cbtimkiem.DisplayMember = "IDtutang"

bằng cái này

Mã: Chọn hết

  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ổ
Bài viết: 56
Ngày tham gia: T.Năm 30/04/2009 10:52 pm

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

Gửi bàigửi bởi tamnv » T.Ba 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

Gửi bàigửi bởi zeusdatinh » T.Tư 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
Bài viết: 14
Ngày tham gia: T.Ba 03/06/2008 1:11 pm

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

Gửi bàigửi bởi linux_nd » CN 23/08/2009 10:42 pm

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

Mã: Chọn hết

  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

Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

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

Gửi bàigửi bởi tungcan5diop » T.Hai 24/08/2009 12:08 pm

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

Mã: Chọn hết

  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
Bài viết: 27
Ngày tham gia: T.Hai 28/04/2008 1:07 am

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

Gửi bàigửi bởi vinaghost » T.Sáu 28/08/2009 7:10 am

Mã: Chọn hết

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

thay bằng

Mã: Chọn hết

  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
Bài viết: 4
Ngày tham gia: T.Tư 02/06/2010 8:02 am

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

Gửi bàigửi bởi ngovanthuc » T.Tư 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ổ
Bài viết: 54
Ngày tham gia: T.Năm 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 6 time

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

Gửi bàigửi bởi ncxn » T.Năm 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?


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.10 khách