Wednesday, November 30, 2016
15
Trong Devexpress có control GridLookupEdit, đại khái là nó giống combobox trong winform nhưng contain trong popup xổ ra là một cái gridcontrol. Điểm khác biệt của Gridlookupedit so với lookupedit là popup xổ ra của nó có thể show được nhiều dữ liệu hơn, như kiểu mình show 1 gridview trong control vậy.

Tưởng tượng là thế này, mình có một danh sách khoảng 1 nghìn row trong gridlookupedit, thông thường để chọn một đối tượng từ grid popup xổ ra thì mình phải bấm nút xổ popup rồi lăn chuột qua lại để tìm đối tượng mình tìm rồi chọn nó, điều này sẽ dễ dàng làm được nếu số lượng row là ít nhưng nếu mà có quá nhiều row thì cũng hơi mất thời gian chút, vậy để cho tiện và nhanh thì tại sao mình không tìm kiếm ngay trên gridlookupedit, nó giống như việc gõ từ khóa tìm kiếm trên google vậy.
OK làm việc này cũng không khó gì vì devexpress đã phát triển hộ rồi, chỉ cần setup 1 số properties thôi :D

private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("ID", typeof(string));
dt.Rows.Add("a5", "Nguyễn Văn B");
dt.Rows.Add("a3", "Võ Trần Quân");
dt.Rows.Add("a4", "Trần Văn A");
dt.Rows.Add("a2", "bbbbbbbbbb");
dt.Rows.Add("a6", "Đinh Tiến C");
dt.Rows.Add("a1", "aaaaaaaaaa");
glueTest.Properties.DataSource = dt;
glueTest.Properties.DisplayMember = "Name";
glueTest.Properties.ValueMember = "ID";
glueTest.Properties.BestFitMode = BestFitMode.BestFitResizePopup;
//dòng này để gridcontrol trong GridlookupEdit tự động resize các column để không thừa không         thiếu nội dung
glueTest.Properties.ImmediatePopup = true;
// dòng này tự động mở popup khi search có kết quả
glueTest.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;
//Setup dòng này để có thể nhập vào gridlookup
}   
Kết quả:
Tìm kiếm từ nhiều cột trong Gridlookupedit
Chức năng tìm kiếm trong Gridlookupedit được thiết kế mặc định là chỉ tìm kiếm dữ liệu trong cột có dữ liệu là DisplayValue và nó không hỗ trợ tìm kiếm trong nhiều cột. Do đó solution cho task này hoặc là phải custom Gridlookupedit hoặc sử dụng 1 control khác là Searchlookupedit.
Trong source code đính kèm mình có 1 CustomGridlookupedit - được sử dụng như là editor type cách dùng nó như sau:
- Copy 2 file CustomGridControl.cs và CustomGridLookUpEdit.cs vào project của bạn (nhớ đổi cả namespace)
- Trong form kéo 1 Gridlookupedit vào rồi chọn Editor Type là CustomGridLookupEdit (Nếu không có thì phải rebuild success project trước).
- Đổ dữ liệu vào Gridlookupedit và enjoy :D


Kết quả:

Example: Source Code

15 comments:

  1. Seach tiếng việt được không ?

    ReplyDelete
    Replies
    1. Value member là: MaTB
      Display member là: MaTB
      Gridlookupedit có 2 cột: MãTB & TênTB

      Muốn Seach bởi all các cột thì làm ntn nhỉ ?

      Delete
    2. Mình đã update bài để xử lý trường hợp của bạn nhé. cheer

      Delete
  2. Bạn ơi có convert được code vb.net không? Mình convert được nhưng tìm kiếm cho ra kết quả không đúng như code C# như bạn.

    ReplyDelete
    Replies
    1. Hi bạn, bạn có thể gửi cho mình code sample của bạn cho mình qua vtquan243@gmail.com hoặc inbox facebook mình https://www.facebook.com/quan.vo.3110, mình sẽ support bạn vào buổi tối available nhất

      Delete
  3. mình sử dụng gridlookupedit trong gridcontrol được không anh

    ReplyDelete
    Replies
    1. là em mún tìm kiếm nhiều dòng trong cái gridlookupedit được add vào gridcontrol

      Delete
    2. được nhé em, có thể dùng nó như repository trong gridcontrol

      Delete
  4. Bài viết hay quá.

    Chào bạn. Mình thấy bài bạn hướng dẫn rất hay, nhưng mình có 1 trường hợp bị vướng là khi mình nhập đến dòng thứ 5 trong gridcontrol, lúc đó cột vật tư mình chọ lại không có sp cần lấy ra, vậy mình đóng form lại qua danh mục vật tư nhập vật tư rồi quay qua form nhập đó lại hả bạn? Có cách nào ok hơn k bạn? Chúc bạn cuối tuần vui vẻ

    ReplyDelete
    Replies
    1. Cảm ơn bạn, trường hợp của bạn theo mình hiểu là cột vật tư của bạn đang sử dụng gridlookupEdit như 1 repository, khi bạn đang thao tác để nhập liệu có sử dụng cột này để load data tương ứng, nhưng vấn đề là trong 1 số trường hợp chưa có data trong cột này thì phải đóng form để nhập data cho cột vật liệu trước đúng ko ? Nếu đúng như mình nghĩ thì vấn đề chỉ là việc load dữ liệu vật tư mới mà ko cần đóng form nhập liệu hiện tại, như vậy chỉ cần bắt ự kiện popup mở gridlookupEdit thì bạn đổ lại datasource cho gridlookupEdit là được, ko cần phải đóng form hiện tại.

      Delete
  5. Ad cho em hỏi a có cái nào hướng dẫn làm frm đăng nhập k ạ ? e tìm hoài k thấy ? Ad có video hướng dẫn k ạ ?

    ReplyDelete
    Replies
    1. https://documentation.devexpress.com/WindowsForms/114370/Build-an-Application/WinForms-MVVM/Tutorials/Lesson-5-Login-Form

      Delete
  6. This comment has been removed by the author.

    ReplyDelete
  7. Bỏ luôn Row Filter bên trong gridLookupEdit thì setting sao vậy bạn

    ReplyDelete