一个cxTreeList有两列,如何根据第一列的内容使第二列动态绑定不同的控件
如:第一列的内容是“日期”,第二列显示cxDateEditProprities
第一列的内容是“数量”,第二列显示cxCurrencyEditProprities
第一列的内容是“单位”,第二列显示cxComboboxEditProprities第二列的初始控件cxComboboxEditProprities

解决方案 »

  1.   

    就动态改变列的Proprities就行
      

  2.   

    我试过var
      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;
      

  3.   

    这是FocusedNodeChanged事件里面的代码,当运行后表面上很正常,但在行之间多次切换的时候就会出现错误
      

  4.   

    但是注意这两句      cxtl.Columns[1].PropertiesClass := TcxComboBoxProperties;
    //      cxtl.Columns[1].PropertiesClass := TcxTextEditProperties; 如果把前一行的换成 TcxTextEditProperties,就没问题,我怀疑是由于TcxComboBoxProperties跟其他控件冲突造成的
      

  5.   

    不应该是和其他控件起冲突,应该是TcxTextEditProperties换成TcxComboBoxProperties后,某些属性不合适所致,至少方法是可行的,接下来仔细查找原因即可
      

  6.   

    不应该在FocusedNodeChanged事件处理,在第二列的onGetEditingProperties处理:GetEditingProperties(
      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;