Code tìm kiếm gần đúng trong C#

Mình đang có một thanh tìm kiếm tài khoản

Và mình load lên datagridview dữ liệu:

Mình muốn dùng ô search để để nhập từ khóa tìm kiếm trong cột họ và tên. Và hiển thị kết quả gần đúng

Dùng like nhé kiểu như này select * from Food where name like para

1 Like

Đó là code tìm kiếm của SQL rồi. Bạn thớt hỏi code tìm kiếm sau khi DataGridView load dữ liệu cơ :joy:

Sao không query xong rồi đổ dữ liệu vào DataGridView nhỉ, đỡ khoản xử lý tìm kiếm bằng c#, mỗi tội query hơi nhiều

Không biết bạn có biết LINQ không.

var FilteredList = From x in ItemList 
                   Where x.Name.StartsWith (f)
                   Select x

var FilteredList = From x in ItemList 
                   Where x.Name.Contains (f)
                   Select x

1 Like

Đó là linq. Có thể làm việc với SQL và nhiều loại khác nữa như list, array, datatable…
Không nên tìm kiếm trên DataGridView vì nó sẽ chạy nửa ngày mới xong :stuck_out_tongue:
Nên có 1 bảng dữ liệu riêng và làm việc trong đó. DataGridView chỉ làm nhiệm vụ hiển thị hoặc update.

1 Like

Bạn tìm hiểu Elastic Search nhé
Một thanh tìm kiếm chung cho tất cả thì nên xài search tool riêng.

1 Like

Trong phần này mình muốn thay ItemList bằng một cột trong database thì phải làm thế nào bạn ?

Cách đơn giản nhất
Giả sử bạn có 1 class User được khai báo như sau:

class User{
    public int ID{get;set;}
    public string FullName {get;set;}
    public string NickName {get;set;}
    public string Email {get;set;}
    public ACCESSRIGHT AccessRight {get;set;} // Giả sử nó là 1 enum
}

Ở Form(hoặc Presentation hoặc html file hoặc Xaml) bạn có GridView {Name = GridView1}
Và Form.cs có 1 Object List<User> UserFromDataBase;
UserFromDataBase Get theo cách thông thường bạn làm (Run QueryString, Get From API, Dùng Framework, hoặc DataContext tùy bạn)
Sau đó ở sự kiện SearchTextbox.TextChanged Xử lý SearchTextbox.Text

GridView1.ItemSource = ( From x in UserFromDataBase
                   Where x.FullName.StartsWith ( SearchTextbox.Text )
                   Select x).ToList(); 
//Update GridView Data Source 

Hoặc bạn có thể thm khảo DataBinding nếu chọn cách này.

Ak Nếu DataSource của bạn là dạng DataTable ( Không phải dạng List như trong Ví Dụ)
Bạn tham khảo đoạn mã sau:

var results = From myRow in myDataTable.AsEnumerable()
            Where myRow.Field<string>("FullName").StartsWith(SearchTextbox.Text)
            Select myRow;
GridView1.ItemSource = result; //Nhớ Convert qua kiểu DataTable.

Viết một cái store produce .Rồi code gọi lên là tốt nhất về hiệu năng mà vẫn đảm bảo bài toán đugns

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?