我想在加載數據庫時修改dbgrid控件中特定單元格的內容。例如,假設我不希望任何數據庫字段在dbgrid中顯示,如果它等於「禁止」。有什麼辦法可以做到嗎?在顯示DBGrid單元格內容之前修改它
回答
可以使用DataSetNotifyEvent Afteropen
DBGrid.Datasource.Dataset.Afteropen:=
,您可以使用隱藏字段:
如果條件那麼 DBGrid.columns [X] .visible:= false
替代方法您可以檢查OnDrawColumnCell事件的條件以覆蓋/刪除特定單元格中的某些內容
使用DataSet事件來同步UI並不是一個好習慣。您可以依靠DataSource事件來實現這一點,將UI邏輯與業務邏輯分開。
由於DataSet的狀態將從dsInactive更改爲dsBrowse,因此可以依賴DataSource OnState更改,以便在數據從數據庫加載數據時進行與UI相關的任何操作。
您可以依靠Auxiliar字段跟蹤以前的狀態,以避免代碼執行超過需要。
例如(未測試的代碼)
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
if (DataSource1.State = dsBrowse) and (not FUIStateInSync) then
begin
//dataset is open, change UI accordingly
DBGrid1.Columns[0].Visible := SomeCondition();
//this will prevent the code to be executed again
//as state comes to dsBrowse after posting changes, etc.
FUIStateInSync := True;
end
else if (DataSource1.State = dsInactive) then
FUIStateInSync := False; //to let it happen again when opened.
end;
我出版這甚至當你有一個公認的答案,因爲外徑建議正是你應該避免的。
我接受了O.D.因爲它的效果很好,這對我有很大的幫助。對所有答案+1。謝謝你的幫助。 – 2011-02-07 05:05:21
去你原來的問題:
使用OnGetText
事件的字段提供從什麼是存儲在數據庫中,以用於演示在不同的值。
DisplayText
如果需要將值呈現給用戶,則布爾型參數將爲True,如果該值對於其他用途是必需的,則該值爲False。對數據集
procedure TForm1.SQLQuery1Field1GetText(Sender: TField;
var Text: string; DisplayText: Boolean);
begin
if (Sender.AsString = 'forbidden') and (DisplayText)
and (PrivilegeLevel(CurrentUser) < 10) then
Text := '********'
else
Text := Sender.AsString;
end;
聯播OnAfterOpen事件。 獲取隱藏字段和它的Visible屬性設爲False和您的DBGrid不會顯示出來
乾杯
我會修改提供的數據網格查詢,以便不包括行(元組),其中有'禁止'字符串。這似乎比從數據庫中檢索數據後不努力不顯示數據要容易得多。
我認爲最好的辦法是不要選擇字段WHERE SOME_VALUE =「禁止」從DATABASE_TABLE
- 1. 在顯示之前修改單元格值
- 2. 在編輯之前更改NSTableView中的單元格內容
- 3. 當前單元格被更改時清除單元格內容
- 4. 在顯示之前修改模型
- 5. TableView不顯示單元格內容
- 6. 在Rad網格中創建行時修改單元格內容
- 7. 如何在tableview單元格顯示之前顯示佔位符?
- 8. 在DevExpress網格中顯示提示的單元格內容
- 9. 在實際顯示它們之前加載AJAX內容
- 10. 修改表格單元格的內容使用jquery/javascript
- 11. Delphi DBGrid格式顯示值
- 12. VBA Excel - 在編寫之前檢查單元格內容
- 13. SWT瀏覽器,在顯示之前更改內容
- 14. 是否可以在顯示NSLocalNotification之前和之後對它進行修改?
- 15. 修改表格單元格
- 16. 如何在jQuery中顯示內容之前顯示setTimeout圖片?
- 17. 在DBGrid中獲取當前單元格的值
- 18. Can Spreadsheet :: WriteExcel更改單元格的格式而不修改其內容?
- 19. Google表格:當單元格內容更改爲「是」時顯示瀏覽器msgBox
- 20. 允許WPF網格單元格內容在網格單元格之外展開?
- 21. CSS顯示:錯誤位置的表格單元格內容
- 22. 顯示:表格單元格,內容和填充
- 23. 如何顯示錶格單元格頂部的內容?
- 24. 當網頁顯示在div中時,錯誤:無法在子元素關閉之前修改父容器元素
- 25. Excel VBA在當前單元格之前插入單元格
- 26. Symfony 1.4 sfWebResponse在sendContent之前修改內容
- 27. 在包含之前修改文件內容
- 28. EmberController的內容屬性應該在修改之前設置
- 29. 在linux中修改文件之前檢查文件的內容
- 30. 在Zend中渲染之前修改頁面內容?
非常感謝。它的工作:) – 2011-02-04 20:51:05