2010-12-08 2 views
0

VB.net에서 의 메서드를 사용하여 검색 상자의 텍스트를 기반으로 DataGridView에서 결과를 필터링하고 있습니다. 그러나이 검색의 아이디어는 에 텍스트가 포함되어 있으면 행을 표시한다는 것입니다. 그래서 내 필터 문자열은 다음과 같이 찾고 끝 :vb.net bindingsource 날짜를 문자열로 캐스팅

filter = "ProductId LIKE '%" & searchterm & "%'" & " OR ScanDate like '%" & searchterm & "%'" 

을 그러나, 나는 필터 속성에 필터를 넣어하려고 할 때, 그것은 비교를 위해 텍스트로 날짜 열을 변환 할 수 없다는, 불평.

날짜/시간 셀을 문자열로 변환하도록 필터에 지시하는 방법이 있습니까?

내가 생각하고있는 것은 날짜의 캐스팅 된 버전이 포함 된 데이터 집합에 숨겨진 열이있는 것입니다. 필터를 열로 필터링하도록 알려줍니다. 당신은 당신의 필터 코드를 분해한다

bindingSource.Filter = filter 
dgv.DataSource = bindingSource.DataSource 

답변

2

나는 그것을 가지고, 그리고

bindingSource.Filter = "ProductId LIKE '%" & searchterm & "%' OR Convert(ScanDate, 'System.String') LIKE '%" & searchterm & "%'" 
0

:

여기 내 할당 코드입니다. 따라서 필터 코드를 한 줄에 모두 설정하는 대신 유효한 DateTime인지 확인하기 위해 searchterm에서 테스트를 실행합니다. 그런 다음 DateTime과 같은 ProductId을 가질 것으로 생각하지 않으므로 필터를 적절하게 변경할 수 있습니다.

try 
{ 
    string dt = DateTime.Parse(searchterm).ToString(); 
    filter = "ScanDate like '%" & searchterm & "%'" 
} 
catch 
{ 
    filter = "ProductId LIKE '%" & searchterm & "%'" 
} 

죄송하지만 C# 코드는 유감 스럽지만 VB.Net으로 변환해야합니다.

+0

는 C#을있는 아무 문제 작동하고, 이것이 실용적하지만,이 키 입력에 따라 필터 및 제품 ID이 PRD1234567처럼 보이는, 그래서 그들은 입력하면 "23"23 인치의 제품 ID 또는 23 일 같은 스캔 날짜를 표시 할 수 있습니다. "23/01/2010 12:00:00" – CrazyPenguin

+0

23을 입력하면 23 시간 23 분 23 초뿐 아니라 하루 검색. 이 작업을 수행하려면 올바른 날짜 형식이 되려면 DateTime을 패딩해야합니다. DD/MM/YYYY hh : MM : SS 형식이어야합니다. –

+0

그게 내가하고 싶은거야. 그 자체에 23을 입력하면 productid에 23이 있거나 23/21/2010 12:00:00 또는 10/01/00과 같이 날짜/시간에 23이 들어있는 행이 반환됩니다. 2023 12:00:00 "또는"10/01/2010 12:23:00 ". 필자가 필터 자체에서 문자열을 캐스트 할 수 있다면 예상대로 작동합니다. 나는 그걸하는 법을 모른다. – CrazyPenguin

관련 문제