Как установить значение по умолчанию для столбца в cxGrid? - PullRequest
0 голосов
/ 22 февраля 2020

Как установить значение по умолчанию для логического столбца в cxGrid? Я имею в виду, что я хотел бы, чтобы по умолчанию все новые строки имели значение "False" для моего логического столбца

1 Ответ

1 голос
/ 22 февраля 2020

Предполагая, что это сетка данных (содержащая, например, cxGridDBTableView), вы должны установить любые значения по умолчанию в событии OnNewRecord набора данных, как это

procedure TForm1.ClientDataSet1NewRecord(DataSet: TDataSet);
var
  Field : TField;
  i : Integer;
begin
  // set all Boolean data fields to False
  for i := 0 to DataSet.FieldCount - 1 do begin
    Field := DataSet.Fields[i];
    if (Field.DataType = ftBoolean) and (Field.FieldKind = fkData) then
    // the test on Field.FieldKind is to avoid disturbing any fkCalculated or fkInternalCalc fields
      Field.AsBoolean := False;
  end;
end;

Если вы это сделаете (или задаете любые другие значения полей в событие OnNewRecord), значения будут автоматически переданы в cxGrid.

Обновление Ниже показано, как установить начальное значение False для логического столбца несвязанного cxGridTableView. Примечание. Код создает TableView, поэтому нет необходимости добавлять его или форму cxGrid в форму.

    // form fields (of Form1)
    cxGrid1 : TcxGrid;
    cxLevel : TcxGridLevel;
    TableView : TcxGridTableView;
    Col1,
    Col2,
    Col3 : TcxGridColumn;
  end;

 [...]
procedure TForm1.FormCreate(Sender: TObject);
begin
  cxGrid1 := TcxGrid.Create(Self);
  cxGrid1.Parent := Self;

  cxLevel := cxGrid1.Levels.Add;
  cxLevel.Name := 'Firstlevel';

  TableView := TcxGridTableView.Create(Self);
  TableView := cxGrid1.CreateView(TcxGridTableView) as TcxGridTableView;
  TableView.Name := 'ATableView';
  TableView.Navigator.Visible := True;

  Col1 := TableView.CreateColumn;
  Col1.DataBinding.ValueType := 'Integer';
  Col1.Caption := 'RowID';

  Col2 := TableView.CreateColumn;
  Col2.DataBinding.ValueType := 'String';
  Col2.Caption := 'RowName';

  Col3 := TableView.CreateColumn;
  Col3.DataBinding.ValueType := 'Boolean';
  Col3.Caption := 'RowChecked';

  cxLevel.GridView := TableView;

  TableView.DataController.OnNewRecord := cxGridTableViewDataControllerNewRecord;
end;

procedure TForm1.cxGridTableViewDataControllerNewRecord(
  ADataController: TcxCustomDataController; ARecordIndex: Integer);
begin
 Caption := IntToStr(ARecordIndex);
  ADataController.Values[ARecordIndex, 2] := False;  // The 2 is the index of Col3
end;
...