Radio_Kat
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору вопрос про группировку записей в TcxGridDBTableView уже обсуждался, но не получается сделать вставку записи корректно Ситуация такая: Есть таблица с полями: id, дата, цена, описание (для простоты таблица из базы Access) таблица отображается в TcxGridDBTableView, сгрупированна по дате. Добавление и редактировании записи происходит в другой форме (вызывается по кнопке) Новая запись по умолчани заносится за текущее число. Проблемма в следующем если перед тем как нажать кнопку "добавить" активна была строка с другой датой, то группа записей за эту дату "развернется" Как это можно побороть? обновлять весь набор после вставки одной записи принципиально. т.к есть тригеры которые изменяют значение одного поля остальных записей пример проекта (31 Кб): http://rapidshare.com/files/190563410/simple_prime.rar.html авишка как это "неправильно" работает тут (162 кб): http://rapidshare.com/files/190567821/simple_prime.avi.html Код: unit u_main_form; uses u_update_insert; procedure Tf_main_form.b_refreshClick(Sender: TObject); var j, c, ARecordIndex : Integer; b : array of boolean; a : array of string; SavePlace: TBookmark; begin try //-- запомнили последовательно разворачивания групп c := cxGrid1DBTableView1.ViewData.RowCount - 1 ; setLength(b, c + 1); setLength(a, c + 1); for j := 0 to c do begin b[j] := cxGrid1DBTableView1.ViewData.Records[j].Expanded; a[j] := cxGrid1DBTableView1.ViewData.Records[j].Values[0]; end; try cxGrid1DBTableView1.BeginUpdate; cxGrid1DBTableView1.DataController.BeginLocate; //-- запомнили выбранную строку SavePlace := ADOTable1.GetBookmark; //-- обновили данные ADOTable1.Close; ADOTable1.Open; //-- востановили выбранную строку ADOTable1.GotoBookmark(SavePlace); finally cxGrid1DBTableView1.DataController.EndLocate; cxGrid1DBTableView1.EndUpdate; end; //-- востановили последовательно разворачивания групп for j:= 0 to length(a) - 1 do with cxGrid1DBTableView1.DataController do begin ARecordIndex := FindRecordIndexByText(0, 1, a[j], False, False, True); GetRowIndexByRecordIndex(ARecordIndex, b[j]); end; except end end; procedure Tf_main_form.b_insertClick(Sender: TObject); begin ADOTable1.Insert; f_update_insert.f_insert := 1; f_update_insert.ShowModal; b_refreshClick(b_refresh); end; procedure Tf_main_form.d_updateClick(Sender: TObject); begin f_update_insert.f_insert := 0; f_update_insert.ShowModal; b_refreshClick(b_refresh); end; procedure Tf_main_form.FormCreate(Sender: TObject); begin ADOTable1.Close; ADOTable1.Open; end; procedure Tf_main_form.b_deleteClick(Sender: TObject); begin ADOTable1.Delete; end; unit u_update_insert; uses u_main_form; procedure Tf_update_insert.b_okClick(Sender: TObject); begin if f_main_form.ADOTable1.Modified then f_main_form.ADOTable1.post; f_update_insert.close; end; procedure Tf_update_insert.FormCreate(Sender: TObject); begin f_insert := 0; end; procedure Tf_update_insert.FormShow(Sender: TObject); begin if ( f_insert = 1 ) then begin f_main_form.ADOTable1.FieldByName('description').AsString := ''; f_main_form.ADOTable1.FieldByName('load_date').AsDateTime := trunc(now()); f_main_form.ADOTable1.FieldByName('price').AsFloat := 0; end; end; procedure Tf_update_insert.b_canselClick(Sender: TObject); begin if f_main_form.ADOTable1.Modified then f_main_form.ADOTable1.Cancel; f_update_insert.close; end; |
|