我使用cxgrid设置了一列checkbox但是程序运行的时候总是不能改变它的值,请问用什么方法可以改变它的值。

解决方案 »

  1.   

    在数据绑定的View中加一个非绑定的CheckBox列首先必须先作如下的设置:
      <aView>.DataController.DataModeController.GridMode := False;
      <aView>.DataController.DataModeController.SmartRefresh := True;
      <aView>.DataController.KeyFieldNames := 'aUniqueField';然后就可以添加新列了:
    uses
      cxDataStorage, cxCheckBox;var
      aCol: TcxGridDBColumn;
    ...
      aCol := <aView>.CreateColumn;
      with aCol do
      begin //请不要设置DataBinding.FieldName属性的值
        Name := 'colUnbound';
        Caption := 'Check';
      end;  //设置值类型
      aCol.DataBinding.ValueTypeClass := TcxBooleanValueType;  //设置对应内置编辑器
      aCol.PropertiesClass := TcxCheckBoxProperties;
      //或者
      //aCol.PropertiesClassName := 'TcxCheckBoxProperties';  //设置内置编辑器的相关属性
      with aCol.Properties as TcxCheckBoxProperties do
      begin
        AllowGrayed := False;
        ValueChecked := True;
        ValueUnchecked := False;
      end;
      

  2.   

    =============================================================================修改一个列的值之后自动修改另一列的值对于数据绑定的GridView,建议在对应的DataSet的Field.OnChange事件或DataSet的BeforePost
    事件中实现
    对于非绑定的GridView,则在DataController.OnRecordChanged事件中实现uses
      cxVariants, cxDataUtils;procedure <Form>.<Column>PropertiesEditValueChanged(
      Sender: TObject);
    var
      Edit: TcxCustomEdit;
      Value: Double;
      View: TcxGridDBTableView;
      AnotherColumn: TcxGridColumn;
    begin
      Edit := Sender as TcxCustomEdit;
      if VarIsNumericEx(Edit.EditValue) then
      begin
        Value := Edit.EditValue;    View := <Grid>.FocusedView as TcxGridDBTableView;
        AnotherColumn := View.GetColumnByFieldName(AnotherField);
        View.DataController.SetEditValue(AnotherColumn.Index, Value/5, evsValue);
      end;
    end;注:使用SetEditValue的好处是它会保存修改前的值,以便用户通过按Esc键恢复原值===============================================================================