2013-07-05 3 views
2

내가 겪고있는 문제는 필터가 datetime의 시간 부분을 받아들이지 않는다는 것입니다.datetime의 C# bindingsource 필터

명확성을 위해

이것은 작동합니다.

" AND NextWorkDate <= #" + DateTime.Now.AddDays(1).ToString("dd.M.yyyy") + "#" 

이 작동하지 않습니다.

" AND NextWorkDate <= #" + DateTime.Now.AddDays(1).ToString("dd.M.yyyy H:mm:ss") + "#" 

나는 날짜의 시간 측면, 필터 만 나던 작업을 포함하려고 할 때마다, 그것은 어떤 행을 반환하지 않습니다.

나는 그것을 천 가지의 다른 방법으로 시도해 보았고, 왜 그럴 시간이 걸리지 않을지 알 수 없었다.

필터를 비교할 데이터 소스 열은 dd.M.yyyy H : mm : ss 형식의 datetime입니다.

데이터베이스 컬럼은 YYYY-MM-DD HH로, 완전히 다른 포맷 : MM : SS는 :

FFF이 라인을 따라 몇 가지 문제의 원인이 될 수 있을까요? 필터가 데이터베이스가 아닌 데이터 소스에 적용 되었기 때문에 그렇지 않다고 생각합니다.

답변

0

해결되었습니다.

문제는 내 자신의 어리 석음이었습니다. 바인딩 소스에 가기 전에 문자열을 필터링하는 다른 클래스가있었습니다.

1

BindingSource (또는 DataTable, DataView 등)을 날짜 대신 시간별로 필터링하는 방법이 부족합니다 (documentation).

그러나이 형식이 작동합니다 :

"AND NextWorkDate <= #yyyy-MM-dd HH:mm:ss#" 

당신은 DateTime.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)으로이 형식을 얻을 수 있습니다.

string filter = string.Format("...AND NextWorkDate <= #{0}#", 
    DateTime.Now.AddDays(1).ToString(
     "yyyy-MM-dd HH:mm:ss", 
     CultureInfo.InvariantCulture)); 

그러나 Linq가 읽기 쉽고 유지 보수가 용이하며 강력하기 때문에 Linq를 선호합니다. 그래서 linq로 기본 목록을 필터링 할 수 있습니다. DataTable을 사용하는 경우 Linq-To-DataSet을 사용하고 그렇지 않은 경우 Linq-To-Sql 또는 Linq-To-Entities을 사용하여 데이터 소스를 쿼리하거나 Linq-To-Objects을 메모리 목록에있는 경우에만 사용하십시오. 그런 다음 DataSource을 다시 할당하면됩니다.

+0

답장을 보내 주셔서 감사합니다. 아니, 작동하지 않습니다. 내가 발견 한 날짜의 유일한 필터 형식은 dd.M.yyyy입니다. 나는이 벽에 며칠 동안 머리를 두드렸다. – BlazeMan

+0

@ user2538011 : 내 대답을 수정했습니다. 대신 ToString ("yyyy-MM-dd HH : mm : ss", CultureInfo.InvariantCulture)'을 시도하십시오. 동일한 메소드를 사용하는'DataTable.Select'로 테스트 해 보았습니다. –

+0

여전히 작동하지 않습니다. BindingSourceFilter는 사용자 지정 DataGridView의 속성입니다. datagridview의 데이터 소스는 데이터베이스의 행 목록입니다. 희망 나는 여기에서 무언가를 무섭게 잘못하지 않고있다. – BlazeMan