我想改變我們的搜索,因爲它現在有點怪異。 目前,它的工作原理是這樣的:在組合框中列出搜索結果
- 用戶在文本框中輸入文本,例如沃爾沃並開始搜索。
- 此搜索SQL包含沃爾沃的所有文章。
- 結果是一個帶有2列BoldID和DisplayValue的列表。
- BoldID只是一個唯一的數字來標識數據庫中的對象。
- DisplayValue是用戶在結果列表中看到的內容。
- 結果集中的每一行都用用戶列表中的行號標識。第一個是1,第二個是2,依此類推。
- 還有一個限制,即只通過在代碼中循環查詢來按意圖顯示最多99次點擊。有一個查詢返回很多匹配是不好的,因爲它在用戶匹配列表中沒有更多的意義。在這種情況下,搜索應該更具體。
結果列表顯示在名爲rightpane的單獨全局窗口中。 hacky的一部分是,如果從模態對話框中搜索,則右窗格必須從主窗口中取消鎖定才能使用鼠標選擇一個值。我們懷疑這可能是應用程序有時會使用主窗口背後的模式對話框鎖定自己的原因。
變化後,它會像這樣工作:
用戶在組合框輸入文字,並開始與像以前那樣需要SQL搜索。但結果集顯示在組合框中。所以我只想改變顯示,如果可能的話,因爲有很多舊的SQL查詢正在使用,並且現在工作正常。
我們使用Delphi 2007,Interbase 2009和DevExpress的組件。昨天我試圖將一個customdatasource連接到一個組合框,但我意識到這還沒有實現。見How to use a TcxCustomDataSource in a TcxExtLookupComboBox。我想使用自定義數據源來實現行號和最大點擊次數。上面列表中的第6和第7條。
所以,現在我看到2個選項:
- 使用DB-感知組合框
- 使用一個文本框,並附上一個網格,它顯示的結果集。
組合框更簡單,因爲它是一個整體組件,但我不知道如何從上面的列表中實現功能6和7。 文本框+網格給予更多的自由,但需要更多的工作。
我更喜歡第一個選項。目前的問題是:
- 我認爲Interbase SQL不能限制結果集中的命中數量。它必須用代碼完成。這是如何完成一個數據庫感知組合框?
- 如何在結果集中顯示行號?
更新1: 要求7解決由於馬裏安,謝謝。 至於6我認爲這是更難。理想情況下,我需要SQL,因此我可以提取自己的列,如Adding row no。但Interbase不支持這一點。
這真的是越來越而不是一個問題 - 將它分開可能是一件好事。 – Tobiasopdenbrouw 2010-08-04 06:54:19