Listbox trong VB

Thảo luận trong 'Tin học văn phòng' bắt đầu bởi gacon0904, 27 Tháng mười 2005.

8,764 lượt xem

  1. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm
    Em có một listbox gồm có 4 cột được add MaNV,HOTEN,NGAYSINH,LUONG.
    Bây giờ làm sau để lấy giá trị của từng cột.Ví dụ: Lấy giá trị của cột MANV.
    Nếu em dùng thuộc tính Text của Listbox thì lấy giá trị của dòng(MaNV,HOTEN,NGAYSINH,LUONG).Cám ơn các Anh/chị.
     
    #1
  2. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Dùng 1 separater char để phân cách giữa các cột. Ví dụ vbTab chẳng hạn. (Tuy nhiên, nếu dữ liệu có length ko đồng đều thì sẽ bị thụt ra thụt vô - Cần có 1 API để giải quyết vấn đề thụt ra thụt vô này)

    strItem = fldMaNV & vbTab & fldHOTEN & vbTab & fldNGAYSINH & vbTab & fldLUONG

    Chẳng nhẽ 1 chuỗi đơn giản trên mà bạn ko thể viết được 1 hàm để tách được ra thì...

    Hướng dẫn nhé: Dùng Instr$(), Mid$(), Left$(), Right$(), TextCompare (ko nhớ tên hàm), v.v...

    Sao bạn ko dùng Grid, ví dụ MS Flex Grid (cho đơn giản) chẳng hạn

    Happy Coding!
     
    #2
  3. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm
    Minh củng tính làm như vậy nhưng danh sách của mình nhiều, có thể hơn 100 dòng nếu dùng vòng lặp để tách từng cột ra thì lâu lắm vì mình tách từng cột để chèn vào Table.
    Gồm có 1 listbox,1 listview:
    Listview nguồn
    Listbox đích
    Chọn các dòng trong Listview nguồn đưa qua listbox đích.Công việc này mình làm được rồi.Nhưng làm sau để tách các cột ra để lưu các giá trị vào table.
    Bạn có cách nào khách ko?Cám ơn bạn.
     
    Last edited: 28 Tháng mười 2005
    #3
  4. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Hơ, tớ lại tưởng là tách ra giá trị từng cột của 1 item khi Click vô cái ListBox đó.

    Tuy nhiên, vẫn ko hiểu được ý định của bạn ở những điểm sau:
    1. Bạn lấy đâu ra dữ liệu để đẩy lên ListView? (mà lại tách thành từng cột rõ ràng như vậy). Mà mục đích là của bạn lại là lưu các giá trị đó vào table? Thế sao ko đẩy cái nguồn dữ liệu lên listview vào luôn cái table đó đi.
    2. Theo như bạn nói thì
    Dữ liểu ở đâu đó --> ListView --> ListBox --> Xử lý tách ra từng cột --> 1 Table nào đó
    Làm qua nhiều khâu trung gian thế để làm gì nhỉ. Tớ hỏi hơi tò mò quá không :)?

    Còn về vấn đề nhiều dữ liệu, 100 đến 1000 dòng đâu phải là nhiều hả bạn. tớ tưởng 100triệu dòng thì mới phải quan tâm. Có rất nhiều APIs làm việc với String (thay cho các hàm VB chuẩn) mà khi làm việc với khối dữ liệu khổng lồ nó tăng tốc đến 100 lần. 100 records, chỉ cần tách ra như cách tớ nói (là cách dài nhất đi chăng nữa) rồi save vào 1 Table thì tớ đảm bảo thời gian thực hiện cũng chỉ 1 đến 2 giây thôi, kich kim là 5 giây (đấy là chưa optimize code).

    Mà bạn đẩy giá trị của từng cột lên table, thế còn các cột khác lên table khác à???? Nếu đẩy tất cả các cột hoặc 1 vài cột vào table thì việc gì phải tách nhỉ. Làm việc với nó như là 1 record ấy. (có format dạng cvs file ấy)

    Làm lập trình bao lâu, khi bạn nêu ra yêu cầu mà tớ lại ko thể hiểu được yêu cầu. Có lẽ...tớ....
     
    #4
  5. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm
    Không phải vậy dâu vì minh nêu vấn đề chưa rõ.

    Table -->ListView --> Chọn dòng chuyển qua-->ListBox --> Xử lý tách ra từng cột --> 1 Table nào đó-->Lập báo cáo.
    Bạn có cách nào khác không?Nếu có thì chỉ mình đi.Cám ơn bạn.
     
    #5
  6. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Listview có thể hiện cột có checkbox để lựa chọn, hoặc là có multi-selection rows để chọn. Vậy cậu bỏ qua 2 khâu --> Listbox --> Tách cột đi (tách cột làm gì nhỉ?)

    Duyệt các items đã selected trong cái listview đó và add add record to cái table mà bạn định dùng làm report.

    Còn nếu ko vẫn cứ muốn đẩy sang listbox thì thà dùng 1 Grid hay 1 cái listview khác còn hơn. ListBox ít khi dùng cho Multi-Columns (trừ 1 số cái của các 3rd parties hoặc của FM20.DLL)
     
    Last edited: 28 Tháng mười 2005
    #6
  7. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm

    Em làm theo cách của Bác nhưng: nếu em chọn 3 dòng thì vòng lặp chạy là đúng 3 nhưng giá trị lưu vào Table lại lấy dòng đầu tiên của Listview chứ không phải 3 dòng mà em chọn.Em không tìm ra được lỗi.Bác chỉ giúp em.Cám ơn Bác.
     
    #7
  8. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Bạn chịu khó tý đi, phải chú ý là làm việc trên selected items chứ ko phải là items của listview nhé. Chú ý tất cả các properties của listview nhé.

    Còn nếu ko thì làm đơn giản nhất (chả phải nghĩ gì cả) là for i = 1 to rows -1
    Nếu item thứ i là selected (cái này thì phải tìm xem item nào là selected item nhé) thì add vô cái table, còn ko thì bỏ qua (Add thế nào cho đúng thì tự bạn phải làm việc thôi - đây là cơ bản của Database mà). Tớ chỉ có thể nói vậy, còn cậu tự tìm cách chuyển vào code nhé. Tớ thích cung cấp cách làm hơn là những đoạn code cụ thể.

    Advance hơn 1 chút cho ứng dụng của bạn: Sau khi làm được công việc trên, bạn nên bổ sung progress bars để báo hiệu % tiến độ và nên dùng LockWindowUpdate để tăng tốc độ vòng lặp. Nên sử dụng DoEvents trong vòng lặp (hoặc tốt nhất là viết lại cái DoEvents đó vì DoEvents cả VB làm việc ko tốt lắm)
     
    Last edited: 29 Tháng mười 2005
    #8
  9. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm

    Em làm được rồi.Cám ơn Bác. Bác cho em hỏi về datagrid.
    Em dùng datagrid cho 1 table(HOCPHI) thì ko bị báo lỗi nhưng nếu em lấy từ 2 table(ví dụ:HOCVIEN và HOCPHI) gồm field: MAHV,HOTEN,SOTIEN,... thì bị thông báo lỗi.Bác cho em hỏi cách nào để giải quyết.Cám ơn Bác.Chúc Bác một tuần mới vui và...
     
    #9
  10. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội

    Hì, lâu lắm mới thấy cách làm kiểu Bound Controls này. Data Source lúc này là 1 Query từ 2 Tables chứ ko phải là 1 Table nữa.

    Tốt nhất bạn nên dùng unbound controls, like MS Flex Grid đi. Dùng Add Item từng record trong recordset lên grid chứ ko nên dùng Bound Grid. Để Add, Delete, Edit từng Record trên Grid, bạn nên viết riêng chứ ko nên sử dụng tính năng bound có sẵn của control.

    Tớ rất muốn giúp bạn nhưng có lẽ bạn nên tự học thêm về VB qua các ví dụ đi đã. Các câu hỏi của bạn...thực sự quá là cơ sở mà nếu trả lời hết những câu đại loại như vậy thì tất cả members trên forùm này ko thể đủ để trả lời hết cho bạn đâu. (Chỉ nên hỏi về giải pháp cho 1 vấn đề, còn về lỗi, về cách lập trình cho từng controls, từng dòng lệnh thì chỉ nên...cực chẳng đã thì mới hỏi thôi). Bạn có đồng ý thế ko?

    Guidline: Bạn hãy cài Help (MSDN) của Visual Studio 6 hoặc lên MSDN trên website của Microsoft để tra cứu các vấn đề mà bạn quan tâm nhé.


    Hope that helps!
     
    Last edited: 31 Tháng mười 2005
    #10
  11. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm
    Cám ơn Bác đã giúp em về cách học VB vì khi đi học thì Thầy dạy toàn những cái làm được không à nên khi ra làm thực tế gặp những trường hợp như vậy.Em phải cô lên nhiều lắm.Chào Bác.Em nghĩ Bác chắc giỏi về VB lắm phải ko?
     
    #11
  12. doancuong24

    doancuong24 Thành viên sơ cấp

    Bài viết:
    1
    Đã được thích:
    0
    Nơi ở:
    phuyen
    Mình có 1 đoạn chuỗi như sau

    AT + CMGL="ALL"+CMGL: 4,"REC READ","+84978774876",9

    132130101

    OK

    Nhưng bây giờ mình muốn tách từng dòng vào 1 mảng ? thì phải lam sao ?
    mình dùng
    mang = split (chuoi , ""vbCRLF"")
    như vậy có đúng không ?
    Có gì gởi qua mail : cuongpy2002vn@gmail.com
    giúp mình nhá
     
    #12

Chia sẻ trang này