一个cxTreeList有两列,如何根据第一列的内容使第二列动态绑定不同的控件
如:第一列的内容是“日期”,第二列显示cxDateEditProprities
第一列的内容是“数量”,第二列显示cxCurrencyEditProprities
第一列的内容是“单位”,第二列显示cxComboboxEditProprities第二列的初始控件cxComboboxEditProprities
如:第一列的内容是“日期”,第二列显示cxDateEditProprities
第一列的内容是“数量”,第二列显示cxCurrencyEditProprities
第一列的内容是“单位”,第二列显示cxComboboxEditProprities第二列的初始控件cxComboboxEditProprities
sValue: string;
begin
try
if APrevFocusedNode <> nil then
begin
if (APrevFocusedNode.Texts[0] = '日期') or (Pos('数量',APrevFocusedNode.Texts[0])>0) then
begin
sValue := APrevFocusedNode.Texts[1];
APrevFocusedNode.Texts[1] := '';
cxtl.Columns[1].PropertiesClass := TcxComboBoxProperties;
// cxtl.Columns[1].PropertiesClass := TcxTextEditProperties;
APrevFocusedNode.Texts[1] := sValue;
end;
end;
if AFocusedNode<> nil then
begin
sValue := AFocusedNode.Texts[1];
if AFocusedNode.Texts[0] ='日期' then
begin
cxtl.Columns[1].PropertiesClass := TcxButtonEditProperties;
(cxtl.Columns[1].Properties as TcxButtonEditProperties).OnButtonClick := GetCalendar;
(cxtl.Columns[1].Properties as TcxButtonEditProperties).ReadOnly := True;
AFocusedNode.Texts[1] := sValue;
end else
if Pos('数量',AFocusedNode.Texts[0])>0 then
begin
AFocusedNode.Texts[1] := '';
cxtl.Columns[1].PropertiesClass := TcxcurrencyEditProperties;
(cxtl.Columns[1].Properties as TcxcurrencyEditProperties).DisplayFormat := '';
(cxtl.Columns[1].Properties as TcxcurrencyEditProperties).EditFormat := '';
AFocusedNode.Texts[1] := sValue;
end;
end;
except end;
end;
// cxtl.Columns[1].PropertiesClass := TcxTextEditProperties; 如果把前一行的换成 TcxTextEditProperties,就没问题,我怀疑是由于TcxComboBoxProperties跟其他控件冲突造成的
Sender: TcxTreeListColumn; ANode: TcxTreeListNode;
var EditProperties: TcxCustomEditProperties);
begin
if ANode.Texts[0] ='日期' then
begin
EditProperties := TcxButtonEditProperties.Create(nil);
end else
if ANode.Texts[0]='数量' then
begin
EditProperties := TcxCurrencyEditProperties.Create(nil);
end else
EditProperties := TcxComboBoxProperties.Create(nil);end;