2013-06-19 8 views
-1

주가, 스포츠 경기 결과, 영화 출석 등을 표시한다고 가정 해 봅시다.DBgrid를 업데이트 할 때 변경된 셀을 강조 표시하는 방법은 무엇입니까?

주기적으로 관련 데이터 소스에 연결된 쿼리의 Close() 및 Open()으로 그리드를 새로 고칩니다.

나는 소유자가 OnDrawCell()을 사용하여 셀을 그리는 방법을 알고 있습니다. 알아낼 수없는 것은 새 값이 주어진 셀의 이전 값과 같거나 다른지를 아는 방법입니다.

여기서 두 개의 유스 케이스가 있다고 가정합니다. 행 수가 고정되어 있고 동일한 행 순서로 유지되고 행이 변경 (삽입/삭제 또는 순서 변경) 될 수있는 경우를 가정합니다.

이전 버전의 경우 업데이트하기 전에 스냅 샷을 찍어서 업데이트 이후에 비교할 수 있지만 많은 양의 데이터가있을 수 있습니다. 현재 보이는 행으로 작업을 제한하려면 확실하지 않습니다. 사용자가 아래로 스크롤하고 마지막 업데이트 도중에 변경된 사항을 계속 알려주고 싶어한다고 생각합니다.

물론 각 행에 고유 키가없는 한 나는 뒤죽박죽이다.

이 작업을 어떻게 효율적으로 수행 할 수 있습니까? TDbGrid에 대한 솔루션은 TMS Software의 TAdvDbGrid 솔루션이 모든 사람에게 도움이 될 것입니다. (가능하면 무료 인 타사 구성 요소와 마찬가지로) 나도 괜찮을 것입니다.

+2

DBGrid가 데이터 표시 전용 인 경우 이전 데이터를 캐시하고 새로 페치 된 레코드와 비교하거나 추적 할 데이터의 현재 값과 이전 값을 모두 포함하는 쿼리를 만들 수 있습니다. 그렇게하면 값을 비교하고 그에 따라 색상을 변경하는 것이 쉽습니다. – LightBulb

답변

2

TDBGrid은 현재 할당 된 데이터 세트에 포함 된 데이터를 읽습니다. 이전 값을 기억하거나 계산을 수행 할 수있는 기능이 없습니다. 변경 사항을 추적하려면 직접 변경해야합니다. 여러 가지 방법 (이전 값 열, 기록 테이블 또는 기타)으로 수행 할 수 있지만 그리드 자체로는 수행 할 수 없습니다. TDBGrid은 데이터를 분석하거나 저장하지 않고 데이터를 표시하기위한 것입니다.

한 가지 제안은 값이 TDBGrid.OnDrawColumnCell 경우에 변경되었는지 당신이 LastValue 컬럼에 당신을의 _oldvalue를 저장 한 다음 그것을 사용할 수있는 BeforePost 이벤트를 사용하여 데이터 집합을 추적하고 변경하는 것 필요에 따라 그림/색칠. if LastValue <> CurrValue then...과 같은 것이 작동합니다.

+0

+1 @kenwhite 네,'OnCellChanging (oldValue, newValue)'를 기대하는 것이 너무 많을 것이라고 생각했습니다. 스냅 샷, 업데이트, 비교, colo (ur)와 같습니다. – Mawg