自定义tcxGridDBColumn以显示日期日历下拉列表和数据感知复选框

时间:2011-02-15 10:52:03

标签: delphi devexpress

我有以下代码,它将一个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相同。有什么想法吗?

2 个答案:

答案 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上。

关于复选框的字段名称的部分,我没有说出你的意思。