Я думаю, что ваша проблема вызвана тем, что вы не указали нам в своем вопросе. Причина, по которой я это говорю, заключается в том, что я создал минимальный, автономный проект - см. Ниже - который, похоже, не отражает проблему, которую вы показываете.
Как вы увидите, cxGrid подается из TClientDataSet, который создается и заполняется во время выполнения, поэтому ему не требуется внешний источник данных. Что еще более важно, cxGrid также создается и настраивается полностью в коде, поэтому ни один из его параметров не сохраняется в файле .DFM, и поэтому вы можете точно указать, какие свойства cxGrid и его компонентов будут изменены по умолчанию, как они были созданы. , ценности. Преимущество создания сетки таким образом состоит в том, что на ее поведение не влияют настройки свойств, скрытых на глубине в Инспекторе объектов.
Чтобы попробовать код
-
создайте новый проект и отредактируйте его основную форму, как показано в коде
, запустите программу и щелкните ячейку времени в первой строке в сетке
измените значение в ячейке времени и
нажмите кнопку Вниз .
На шаге 4 для меня происходит следующее: изменение ячейки времени сохраняется в наборе данных именно так, как и должно быть, и фокус перемещается на ячейку времени в ряду ниже, опять же, именно так, как и должно быть.
Итак, поскольку в моем коде нет ничего явно неправильного, тот факт, что вы получаете другой результат в вашем проекте, должен означать, что он вызван чем-то другим в вашем проекте. Конечно, если вы сможете найти способ изменить мой проект так, чтобы он вел себя неправильно, аналогично вашему, это могло бы привести к ошибке в коде Devex, которую, я думаю, они смогут найти и исправить.
Код
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Variants, cxGraphics, cxgrid, DB, DBClient, ExtCtrls, DBCtrls, StdCtrls,
cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxStyles,
cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit, cxNavigator,
cxDBData, cxGridLevel, cxClasses, cxGridCustomView,
cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
cxTextEdit, cxMaskEdit;
type
TForm1 = class(TForm)
CDS1: TClientDataSet;
CDS1ID: TAutoIncField;
DS1: TDataSource;
DBNavigator1: TDBNavigator;
CDS1Name: TStringField;
CDS1Time: TTimeField;
procedure FormCreate(Sender: TObject);
public
cxGrid : TcxGrid;
cxLevel : TcxGridLevel;
cxView : TcxGridDBTableView;
end;
[...]
procedure TForm1.FormCreate(Sender: TObject);
var
Col : TcxGridDBColumn;
begin
// Create the cxGrid, add a Level to it and then add a TcxGridDBTableView to that
cxGrid := TcxGrid.Create(Self);
cxGrid.Parent := Self;
cxGrid.Width := 400;
cxLevel := cxGrid.Levels.Add;
cxLevel.Name := 'Firstlevel';
cxView := cxGrid.CreateView(TcxGridDBTableView) as TcxGridDBTableView;
cxView.Name := 'ATableView';
cxView.DataController.KeyFieldNames := 'ID';
cxLevel.GridView := cxView;
cxView.DataController.DataSource := DS1;
cxView.DataController.CreateAllItems;
Col := TcxGridDBTableView(cxView).Columns[2];
{$define CustomTime}
{$ifdef CustomTime}
Col.PropertiesClassName := 'TcxMaskEditProperties';
Col.PropertiesClass := TcxMaskEditProperties;
TcxMaskEditProperties(Col.Properties).EditMask := '!90:00:00;1;_';//MASK_TIME;
TcxMaskEditProperties(Col.Properties).DisplayFormat := '!90:00:00;1;_';//MASK_TIME;
{$endif}
ActiveControl := cxGrid;
CDS1.IndexFieldNames := 'ID';
CDS1.CreateDataSet;
CDS1.InsertRecord([1, 'First', Frac(Now)]);
CDS1.InsertRecord([2, 'Second', Frac(Now + 1/24)]);
CDS1.First;
end;
end.