2010-06-30 196 views
2

迄今爲止,我知道在ClientDataSet中的排序工作在indexDefs上。 我可以添加一個indexDef,設置我想要排序的字段,並通過ixDescending屬性定義要排序的方向。Delphi TClientDataSet排序(插入)問題

我有一個ClientDataSet連接到一個數據源,這是一個DBGrid的源。 當我現在在ClientDataSet中插入一條新記錄時,它會插入到表的頂部(ixDescending = false)或表的底部(ixDescending = true)。

但我想要一個降序,新的記錄應該在表格頂部 - 而不是在底部。 我試圖在運行時更改indexDefs來實現此目的 - 但沒有成功。 有人有一個想法如何做到這一點?

回答

0

如果您已經插入記錄,除非您爲索引字段設置了值,則它們爲NULL,並進行相應排序。

+0

我不明白 - 當我沒有爲索引字段設置值時,順序是上升的。在插入新記錄之前,我需要降序。 – ben 2010-07-01 05:26:27

+0

問題可能是ClientDataset如何處理索引中的NULL值。它們可以被認爲大於或小於任何其他值。如果CDS使用後一種約定,並且您使用降序,則索引字段中具有NULL值的記錄將放在底部。 – 2010-07-01 09:53:19

+0

你當然是對的。我已經選擇了另一個索引字段,現在在發佈新記錄之前填充它,現在它在那裏它應該是 - 謝謝;) – ben 2010-07-01 18:46:37

0

我不知道一個優雅的解決方案(雖然我在這方面是新手。)

也許有一些方法可以讓你在你的ClientDataSet創建臨時布爾場...( )可能是一個計算的字段?)假設你命名新字段「NewRecord」並將其包含在IndexDef中,以便它是最重要的排序標準。

在.OnCreate事件中,您將其設置爲true(內部會是1?)。在.OnPost事件中,您將其設置爲false。

如果您不想依賴布爾值的內部表示,那麼您可以創建一個字符串字段並將「ZZZZZZZ」放入其中。或者是一個整數字段,並將MaxInt放入其中。