2012-12-04 2 views
2

개체로 채워진 DataGridView이 있습니다. 이제 DataGrid에 대한 검색/필터 함수가 필요합니다. 텍스트 문자열을 입력 할 수있는 텍스트 상자를 사용하려고하는데 내 머리글에서이 문자열을 모든 개체 필드 (예 : 개체가 전자 메일 일 경우 제목 필드와 문자열을 일치시키려는 경우)와 비교합니다. DataGrid.개체를 사용하여 DataGrid를 필터링하는 방법 C#

var newMess = LM.GetNewMessages(); 
if (newMess.Count > 0) 
{ 
    for (int i = 0; i < newMess.Count; i++) 
    { 
     LM.InboxTemp.Insert(0, newMess[i]); 
    } 
} 
BindingSource source = new BindingSource(); 
source.DataSource = LM.InboxTemp; //List with Objects 
dgNewMess.DataSource = source; 
dgNewMess.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
dgNewMess.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
dgNewMess.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
dgNewMess.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 

답변

5

당신의 수집을 필터링 할 경우는 DataGrid.DataSource는 다음과 같이 선언 어떤 도움을 경우

는 (방법에 대해 걱정하지 마십시오, 문제는 필터/검색 기능입니다) 이메일, 당신은 Linq를 사용할 수 있습니다. 당신이 필터를

를 데이터 소스이 방법

dgNewMess.DataSource = new BindingListView<Email>(LM.InboxTemp); 

을 할당하고 나중에 적용 할 수 있습니다Equin.ApplicationFramework.BindingListView

string filter = txtFilter.Text; 
LM.GetNewMessages() 
    .Where(msg => msg.Subject.Contains(filter)) 
    .ToList() 
    .ForEach(msg => LM.InboxTemp.Insert(0, msg)); 

UPDATE : 또한 당신은 당신의 InboxTemp 목록에 새 필터링 된 메일을 삽입 List<Email>ForEach 방법을 사용할 수 있습니다

+0

내가 갖고있는 목록은 이미 개체 (이메일)로 채워져 있으며이 목록은 DataGrid에 연결되어 있습니다. 목록에 새 객체를 삽입하고 싶지는 않지만 텍스트 상자의 검색 기준에 따라 필터링 된 객체를 표시 할 수 있기를 원합니다. 필터링 된 객체에 대해 다른 DataSource를 사용해야합니까? 아니면 같은 것을 사용할 수 있습니까? – MrProgram

+0

@ user1789325 샘플 코드에서 수행중인 작업은 필터링하지 않고 전자 메일을 목록에 삽입하는 것입니다. 이미 GridView에 할당 된 데이터를 필터링 하시겠습니까? BTW는 WinForms 또는 무엇입니까? –

+0

예, WinForms입니다. 정확히, DataGrid가 이미 목록의 전자 메일로 채워져 있습니다. – MrProgram

관련 문제