我有以下代码,它将一个Checkbox添加到DateEdit控件:
procedure TForm1.cxDateEdit1PropertiesPopup(Sender: TObject);
var
AEdit: TcxDateEdit;
ACalendar: TcxPopupCalendar;
ACheckBox: TcxCheckBox;
begin
AEdit := TcxDateEdit(Sender);
if AEdit.Tag <> 1 then
begin
AEdit.Tag := 1;
ACalendar := TcxPopupCalendar(AEdit.Properties.PopupControl);
ACheckBox := TcxCheckBox.Create(Self);
ACheckBox.Parent := ACalendar.Parent;
ACheckBox.Align := alBottom;
ACheckBox.Transparent := True;
ACalendar.Parent.Height := ACalendar.Parent.Height + ACheckBox.Height;
end;
end;
我需要更改此代码,以便该复选框具有数据感知功能,并附加到与DateEdit控件相同的数据源/数据集。复选框的字段名称与连接“SELECTED”的DateEdit相同。有什么想法吗?
答案 0 :(得分:2)
Developer Express Editors库附带一个数据识别复选框,如果您不想编写自己的复合组件,请使用相同的代码,只需更改用于创建复选框的类,并添加代码以将其关联到使用您自己的规则的字段,例如:
procedure TForm1.cxDateEdit1PropertiesPopup(Sender: TObject);
var
//I changed the class of the DateEdit also, if you connect to your datasource by
//other means, update the code accordingly
AEdit: TcxDBDateEdit;
ACalendar: TcxPopupCalendar;
ACheckBox: TcxDBCheckBox;
AField: TField;
begin
AEdit := Sender as TcxDBDateEdit; //just to be on the safe side
if AEdit.Tag <> 1 then
begin
AEdit.Tag := 1;
ACalendar := TcxPopupCalendar(AEdit.Properties.PopupControl);
ACheckBox := TcxDBCheckBox.Create(Self);
ACheckBox.Parent := ACalendar.Parent;
ACheckBox.Align := alBottom;
ACheckBox.Transparent := True;
if Assigned(AEdit.DataBinding.Field) then
AField := AEdit.DataBinding.DataSource.DataSet.FindField(AEdit.DataBinding.Field.Name + 'SELECTED')
else
AField := nil;
if Assigned(AField) then
begin
ACheckBox.DataBinding.DataSource := AEdit.DataBinding.DataSource;
ACheckBox.DataBinding.Field := AField;
end;
ACalendar.Parent.Height := ACalendar.Parent.Height + ACheckBox.Height;
end;
end;
答案 1 :(得分:1)
我似乎需要在面板上创建一个包含DateEdit和Checkbox的新组件,并且有自己的数据源/数据集,您可以在创建时连接到DateEdit的数据源/数据集。 拥有此组件后,您必须根据需要实现Checkbox的行为。在DateEdit-Events上。
关于复选框的字段名称的部分,我没有说出你的意思。