Настройте cxGridDBColumn для отображения выпадающего списка календаря даты и данных. - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть следующий код, который добавляет флажок к элементу управления 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. Имя поля для флажка будет таким же, как DateEdit с сцепленным «SELECTED». Есть идеи?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Библиотека 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 голос
/ 15 февраля 2011

Мне кажется, вам нужно создать новый компонент, который включает DateEdit и флажок на панели и имеет свой собственный источник данных / набор данных, который вы подключаете к источнику данных / данным DataEdit при создании. После того, как вы получите этот компонент, вам нужно будет реализовать поведение флажка в соответствии с вашими потребностями evtl. на DateEdit-Events.

Относительно части с именем файла для флажка я не понял, что вы имеете в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...