Dennica
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, dxmdaset, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxCalendar; type TForm2 = class(TForm) cxGrid1DBTableView1: TcxGridDBTableView; cxGrid1Level1: TcxGridLevel; cxGrid1: TcxGrid; dxMemData1: TdxMemData; dxMemData1ds: TDateTimeField; dxMemData1de: TDateTimeField; DataSource1: TDataSource; cxGrid1DBTableView1RecId: TcxGridDBColumn; cxGrid1DBTableView1ds: TcxGridDBColumn; cxGrid1DBTableView1de: TcxGridDBColumn; procedure DataSource1UpdateData(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.DataSource1UpdateData(Sender: TObject); var bm: Pointer; cds, cde: Variant; begin with dxMemData1 do begin dxMemData1.DisableControls; bm := dxMemData1.GetBookmark; try cds := FieldByName('ds').Value; cde := FieldByName('de').Value; // Если изменилась дата начала периода if cds <> FieldByName('ds').OldValue then begin // Если первая запись, не даем менять дату начала периода if RecNo = 1 then begin Edit; FieldValues['ds'] := FieldByName('ds').OldValue; Post; end else begin Prior; Edit; FieldValues['de'] := cds; Post; end; // Если изменилась дата конца периода end else if cde <> FieldByName('de').OldValue then begin // Если последняя запись, не даем менять дату конца периода if RecNo = RecordCount then begin Edit; FieldValues['de'] := FieldByName('de').OldValue; Post; end else begin Next; Edit; FieldValues['ds'] := cde; Post; end; end else Exit; GotoBookmark(bm); finally FreeBookmark(bm); EnableControls; end; end; end; end. |