2011-12-29 81 views
2

在運行時動態創建TDBGrid組件時,我無法禁止用戶編輯單元格中的值。這是我正在試圖完成這種類型的行爲:禁用TDBGrid上的編輯選項不起作用

TDBGrid *DbGrid = new TDBGrid(Owner); 
DbGrid->Options = DbGrid->Options >> dgEditing; 

當窗體設計器的所有功能正常禁用dgEditing。我無法找到這兩種情況之間的區別。我該怎麼做才能禁用DBGrid單元格的編輯?

回答

3

關鍵是要做到這一點的方式如下:

DbGrid->選項= TDBGridOptions(DbGrid->選項)>> dgEditing

,但我不知道有什麼區別。

0

我有與西雅圖版本的C + + Builder相同的問題,我無法以編程方式更改DbGrid是否允許或不允許編輯。 DbGrid-> Options值可以在不需要TDBGridOptions()強制轉換的情況下更改,但DbGrid不會遵循DbGrid-> Options設置的值。如果在對象檢查器中爲dgEditing啓用了設置,那麼無論DbGrid-> Options.dgEditing的狀態如何,並且如果在對象檢查器中禁用了dgEditing,那麼DbGrid永遠不會允許編輯,因此DbGrid始終允許進行編輯。它開始出現工作(即行與單元格的變化)。我已經使用DbGrid-> Options.ToInt()和DbGrid-> Options.Contains(dgEditing)測試了這一點,以確保我不會絆倒自己。

0

我終於找到了一種方法來使它工作。

如果您將dgEditing設置爲true(對於Object Inspector中的DBGrid的選項),則此操作將隨時讓用戶進行編輯。然後,在不允許用戶編輯時設置DBGrid->ReadOnly=false

我沒有任何運氣試圖設置個人DBGrid->Columns->Items[ii]->ReadOnly=false。該方案並沒有阻止我這樣做,但它確實忽略了我的任何內容。

我寫的最小元素的特殊的小測試程序,並能僅僅通過在Object Inspector中dgEditing設置爲true,以獲得良好的效果,然後改變dgEditing爲假時,我想,以防止編輯的用戶,但是當我把它放到我的完整程序中,防止DBGrid無法正常工作。

DBGrid->ReadOnly也可能是其他人的解決辦法。