2010-06-30 5 views
2

까지 멀리 정렬하는 것은 ClientDataSet에서 정렬이 indexDefs를 통해 작동한다는 것을 안다. indexDef를 추가하고, 정렬 할 필드를 설정하고, ixDescending 속성을 통해 정렬 할 방향을 정의 할 수 있습니다.델파이 TClientDataSet (삽입) 문제를

DBGrid의 소스 인 dataSource에 ClientDataSet이 연결되어 있습니다. 이제 ClientDataSet에 새 레코드를 삽입하면 테이블의 맨 위에 삽입 (ixDescending = false)되거나 테이블의 맨 아래에 삽입 (ixDescending = true)됩니다.

하지만 내림차순을 원하고 새 레코드가 테이블의 맨 위에 있어야합니다 (맨 아래가 아님). 나는 이것을 달성하기 위해 런타임에 indexDefs를 변경하려고 시도했지만 성공하지 못했습니다. 누군가이 방법을 알고 있습니까?

답변

0

인덱싱 된 필드의 값을 설정하지 않으면 레코드를 삽입 할 때 레코드가 NULL로 설정되고 그에 따라 정렬됩니다.

+0

내가 이해하지 못한다. 색인 필드에 값을 설정하지 않으면 오름차순으로 표시된다. 새 레코드를 삽입하기 전에 이미 내림차순이 필요합니다. – ben

+0

ClientDataset이 인덱스의 NULL 값을 처리하는 방법에 문제가있을 수 있습니다. 그것들은 다른 어떤 값보다 크거나 또는 더 작다고 생각할 수 있습니다. CDS가 후자의 규칙을 사용하고 내림차순을 사용하면 인덱스 된 필드에 NULL 값이있는 레코드가 맨 아래에 놓입니다. –

+0

당신은 물론 맞습니다. 새로운 레코드를 게시하기 전에 채워지는 다른 인덱스 필드를 지금 선택했습니다. 이제는 어디에 있어야합니까? - 감사합니다;) – ben

0
(나는이 지역에서 초보자 해요하지만.) 나는 우아한 해결책을 알고하지 않습니다 당신이 당신의 ClientDataSet에있는 일시적으로 부울 필드를 생성하는

은 아마도 몇 가지 방법이

(어쩌면 계산 된 필드?) "NewRecord"라는 새 필드의 이름을 IndexDef에 포함시켜 가장 중요한 정렬 기준이되도록한다고 가정합니다.

.OnCreate 이벤트에서 true로 설정합니다 (내부적으로 1입니까?). .OnPost 이벤트에서는 false로 설정합니다.

부울의 내부 표현에 종속되지 않으려면 문자열 필드를 만들고 그 안에 "ZZZZZZZ"를 넣을 수 있습니다. 또는 정수 필드에 MaxInt를 입력하십시오.

관련 문제