2014-02-26 2 views
1

gridview에서 결과를 필터링 할 수있는 filterexpression이 있습니다.filterexpression이 "wrong"결과를 반환합니다.

두 개의 드롭 다운리스트 (filterexpressression에는 5와 6, 나머지는 textboxes와 ine입니다)가 있습니다. 여기서 미리 정의 된 특정 범위를 선택하여 결과를 필터링 할 수 있습니다.

FilterExpression="CompanyName LIKE '{0}%' AND CityName like '{1}%' AND Convert(Zipcode, 'System.String') like '{2}%' AND Convert(ActionID, 'System.String') like '{4}%' AND Convert(Employees, 'System.String') like '{5}%' or (Convert(Zipcode, 'System.String') >= '{2}%' AND Convert(Zipcode, 'System.String') <= '{3}%') or (Convert(Employees, 'System.String') >= '{5}%' AND Convert(Employees, 'System.String') <= '{6}%')"> 

내 문제는 직원 수를 관련되어 다음과 같이

내 filterexpression이다. 직원 수에 사용할 수있는 값은 99, 199, 499, 999 및 1000입니다.

첫 번째 값을 99로 선택하고 두 번째 값을 199로 선택하면 해당 값을 갖는 회사 99를 포함하고 있기 때문에 999 명의 직원이 있습니다. 그러나 논리적으로는 999가 선택된 범위를 벗어나므로 이러한 상황이 발생하지 않아야합니다.

어떻게 해결할 수 있습니까?

편집 : 내 컨트롤 매개 변수에 ConvertEmptyStringToNull = false가 있습니다. 따라서 결과를 얻으려면 각각의 텍스트 상자를 채울 필요가 없습니다.

변환에 대해서는 필터를 지정하지 않으면 그리드 뷰에 데이터가 표시되지 않습니다.

답변

3

일부 줄 바꿈을 추가 할 경우 (네 AND 연산 포함) 첫 번째 블록이 일치하는 경우, 기록이 표시됩니다, 기본적으로

CompanyName LIKE '{0}%' 
AND CityName like '{1}%' 
AND Convert(Zipcode, 'System.String') like '{2}%' 
AND Convert(ActionID, 'System.String') like '{4}%' 
AND Convert(Employees, 'System.String') like '{5}%' 

or 
(
    Convert(Zipcode, 'System.String') >= '{2}%' 
    AND Convert(Zipcode, 'System.String') <= '{3}%' 
) 
or 
(
    Convert(Employees, 'System.String') >= '{5}%' 
    AND Convert(Employees, 'System.String') <= '{6}%' 
) 

에 무슨 일이 일어나고 있는지 볼 경우에도 OR 블록 일치 없음. 또한 999도 마찬가지입니다

AND Employees LIKE '99%' 

을 의미 AND Convert(Employees, 'System.String') like '{5}%'에서

봐 가까이 난 당신이 첫 번째 블록에서 Emplyee 필터를 제거하는 것이 좋습니다.

UPDATE

는 OR 표현 당신이 문자열로 >=<= 연산자를 사용하고, 또 다른 문제가있다. 그 평가 방법을 예측할 수는 없지만 직원을 int로 변환하고 끝에 %을 제거하는 것이 좋습니다.

or 
(
    Convert(Employees, 'System.Int32') >= {5} 
    AND Convert(Employees, 'System.Int32') <= {6} 
) 
+0

하지만 제거하면 어떻게 특정 범위를 걸러 낼 수 있습니까? – dQlle

+0

@dQlle 당신의 경우에'99로 시작하는 모든 것 '과 일치하는'AND Employees LIKE '99 %'부분 만 제거해야합니다. '> =와 <='를 가진 다른 parth는 이미 원하는대로 행동해야합니다 (숫자에 캐스팅 된 경우). –

+0

int로 변경하여 제안을 시도했지만 새로운 문제가 있습니다. int와 string은> =와 <=가있을 때 정말 좋아하지 않으므로 구문 오류 errror가 발생합니다. 원본 코드를 사용하면 199에서 499까지 다른 범위를 선택하면 완벽하게 작동합니다. – dQlle

관련 문제