2013-11-20 2 views
1

나는 간단한 데이터베이스를 가지고 있으며 여러 기준으로 검색 할 수 있도록 노력하고 있습니다. 내가 모르는 것은 이러한 다양한 기준을 모두 사용하여 필터하기 위해 datagridview를 얻는 방법입니다. 나는 그것을 매우 혼란스럽게하고 있습니다. if else 문으로 알고 있습니다. 콤보 상자로 필터링하면 다른 모든 기준이 무시됩니다. 이 가지고다중 바인딩 소스 필터

if (StartDate < EndDate) 
{ 
    employeeSuggestionsBindingSource.Filter = string.Format("[Suggestion Date] >= #{0:M/dd/yyyy}# AND [Suggestion Date] <= #{1:M/dd/yyyy}#", StartDate, EndDate); 
} 
else if (string.IsNullOrEmpty(SearchEmp) == false) 
{ 
    employeeSuggestionsBindingSource.Filter = string.Format("Employee like '%{0}%'", SearchEmp.Trim().Replace("'", "''")); 
} 
else if (string.IsNullOrEmpty(SearchSupv) == false) 
{ 
    employeeSuggestionsBindingSource.Filter = string.Format("[Supervisor] like '%{0 }%'", SearchSupv.Trim().Replace("'", "''")); 
} 
else if (string.IsNullOrEmpty(SearchAssigned) == false) 
{ 
    employeeSuggestionsBindingSource.Filter = string.Format("[Assigned To] like '%{0}%'", SearchAssigned.Trim().Replace("'", "''")); 
} 
else if (comboBoxCompleted.Text == "Incomplete") 
{ 
    employeeSuggestionsBindingSource.Filter = string.Format("[Completed]='False'"); 
} 
else if (comboBoxCompleted.Text == "Completed") 
{ 
    employeeSuggestionsBindingSource.Filter = string.Format("[Completed]='True'"); 
}  

결과를 필터링 할 훨씬 쉬운 방법으로 나는 아마 하 ... 최악의 방법으로 그것을하고 있어요 알고 여기 내 기본 코드입니다.

+1

, 그렇지? 어떤 유형이'employeeSuggestionsBindingSource'입니까? –

+0

DataGrid가 Access DB에 바인딩됩니다. 그게 당신이 타입을 의미하는 것이라면. – user3013396

답변

1

정확하게 이해하면 하나 이상의 조건문을 사용하여 필터 기준을 구성해야합니다. 당신은 AND과 함께 여러 조건을 구성하여이 작업을 수행 할 수 있습니다 :

string filter = null; 

if (StartDate < EndDate) 
{ 
    filter = CombineCriteria(
     filter, 
     string.Format(
      "[Suggestion Date] >= #{0:M/dd/yyyy}# AND " + 
      "[Suggestion Date] <= #{1:M/dd/yyyy}#", 
      StartDate, 
      EndDate)); 
} 

if (string.IsNullOrEmpty(SearchEmp) == false) 
{ 
    filter = CombineCriteria(
     filter, 
     string.Format(
      "[Employee] LIKE '%{0}%'", 
      SearchEmp.Trim().Replace("'", "''"))); 
} 

// ... more filter conditions ... 

if (comboBoxCompleted.Text == "Incomplete") 
    filter = CombineCriteria(filter, "[Completed] = False"); 
else if (comboBoxCompleted.Text == "Completed") 
    filter = CombineCriteria(filter, "[Completed] = True"); 

employeeSuggestionsBindingSource.Filter = filter; 

CombineCriteria()은 다음과 같다 여기서

당신은 아마 같은 쿼리에 대해 여러 필터를 추가 할 필요가
private static string CombineCriteria(string oldCondition, string newCondition) { 
    if (string.IsNullOrEmpty(oldCondition)) 
     return newCondition; 

    return "(" + oldCondition+ ") AND (" + newCondition + ")"; 
} 
+0

정말 고마워요! 이제 작동 중입니다. 나는 이와 같은 방법이나 하나 추가하는 방법을 생각해 내지 못했습니다. – user3013396