【发布时间】:2015-01-23 21:58:31
【问题描述】:
具有布尔类型的可为空的数据集字段,如何在链接到该字段的TDBCheckBox 控件后代中将其NULL 值显示为未选中状态。默认情况下,TDBCheckBox 将字段的 NULL 值显示为灰色复选框:
但我需要它在我的TDBCheckBox 控件后代中显示为未选中状态:
修改原始TDBCheckBox 源代码对我来说不是一个选项,我也不能覆盖TDBCheckBox.GetFieldState,因为它是一个私有方法。
那么,如何在我的TDBCheckBox 后代中将NULL 值显示为未选中状态?
【问题讨论】:
-
对不起我的英语:-)
-
现在手头只有 Delphi 2009... 这个控件的代码不多,所以你可以考虑创建一个
TCustomCheckBox控件后代。或者您可以覆盖TDBCheckBox的构造函数,为FDataLink的OnDataChange和OnUpdateData事件提供您自己的处理程序(关闭AllowGrayed属性)。或者您可以在获取时COALESCE(Field, False)您的字段数据(如果这是一个选项)。或者,您可以为数据集创建一个计算字段。或者也许数据集提供者可以为你在全球范围内进行这种转换...... -
非常感谢您的回答。我为 FDataLink 的 OnDataChange 和 OnUpdateData 事件覆盖了 TDBCheckBox 的构造函数,但它不起作用((。我有很多数据集,所以我无法添加计算字段。
-
Err,收回我为
FDataLink提供事件处理程序的想法,它只是一个私有字段,至少在 D2009 中是这样(不能说是否改变了,甚至你有什么版本)。那里几乎是封闭控制。 -
也许我可以使用 WMPaint(var Message: TWMPaint);消息 WM_PAINT?