Trang 1 trên 1

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

Đã gửi: CN 31/05/2009 2:54 pm
gửi bởi zeusdatinh
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!

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

Đã gửi: CN 31/05/2009 7:47 pm
gửi bởi tungcan5diop
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

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

Đã gửi: T.Hai 01/06/2009 8:48 am
gửi bởi zeusdatinh
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!

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

Đã gửi: T.Hai 01/06/2009 10:45 am
gửi bởi tungcan5diop
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

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

Đã gửi: T.Hai 01/06/2009 11:25 am
gửi bởi zeusdatinh
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 ạ?

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

Đã gửi: T.Ba 02/06/2009 12:10 pm
gửi bởi tungcan5diop
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

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

Đã gửi: T.Ba 02/06/2009 12:45 pm
gửi bởi zeusdatinh
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!

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

Đã gửi: T.Ba 02/06/2009 1:40 pm
gửi bởi zeusdatinh
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!

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

Đã gửi: T.Ba 02/06/2009 2:02 pm
gửi bởi tungcan5diop
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

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

Đã gửi: T.Ba 02/06/2009 3:05 pm
gửi bởi zeusdatinh
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!

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

Đã gửi: T.Ba 02/06/2009 5:56 pm
gửi bởi tamnv
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.

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

Đã gửi: T.Ba 02/06/2009 9:23 pm
gửi bởi tungcan5diop
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

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

Đã gửi: T.Ba 02/06/2009 11:00 pm
gửi bởi tamnv
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)

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

Đã gửi: T.Tư 03/06/2009 3:34 pm
gửi bởi zeusdatinh
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!

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

Đã gửi: CN 23/08/2009 10:42 pm
gửi bởi linux_nd
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

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

Đã gửi: T.Hai 24/08/2009 12:08 pm
gửi bởi tungcan5diop
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

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

Đã gửi: T.Sáu 28/08/2009 7:10 am
gửi bởi vinaghost

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.

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

Đã gửi: T.Tư 09/01/2019 9:48 pm
gửi bởi ngovanthuc
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 à

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

Đã gửi: T.Năm 10/01/2019 10:09 am
gửi bởi ncxn
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?