我想在加载数据库时修改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