Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.168.172] |
|
Сообщ.
#1
,
|
|
|
написал наследника от TDataLink. перегрузил метод EditingChanged;
как и положено он вызывается после того как TDataSet переходит в режим редактирования (или инсерта) тоже самое когда происходит post. как и положено строка активная та над которой проводятся "махинации". прикол начинается когда вызвать insert а потом cancel. статус как и положено dsBrows. но сама строка еще не "убрана" и она активная в данный момент. возможно ли как то узнать что в данный момент происходит отмена вставки? Добавлено пс. хотя наверное не в ту ветку запостил. просто я компонент пишу соответственно решил что и вопросик к компонентам. хотя сейчас сомнения берут. |
Сообщ.
#2
,
|
|
|
С таким подходом можно весь форум свалить в "Разработку компонентов", главное написать волшебную фразу.
>возможно ли как то узнать что в данный момент происходит отмена вставки? >статус как и положено dsBrowse |
Сообщ.
#3
,
|
|
|
мне нужно после вставки строки добавить ветку в дереве а при отмене вставки не добавлять. ибо перегружать постоянно все дерево при изменении количества записей как то не красиво.
dsBrowse и после Post и после Cancel; |
Сообщ.
#4
,
|
|
|
Можно попробовать перекрыть DataEvent и запоминать последнее состояние dataseta, а уже в EditingChanged использовать этот флажок сравнив с текущим состоянием dataseta.
|
Сообщ.
#5
,
|
|
|
и что мне это даст? я и из EditingChanged прекрасно могу запомнить что происходит insert или edit. у меня проблема с отловом post и cancel. при этих двух действиях в EditingChanged приходит dsBrowse. я бы не "парился" если бы новая строка исчезала бы при Cancel, но она не просто есть она даже активна в данный момент (в момент срабатывания EditingChanged ) хотя состояние dsBrowse.
|
Сообщ.
#6
,
|
|
|
Например при Post-e происходит событие DataEvent(deUpdateRecord), а при Cancel нет
|
Сообщ.
#7
,
|
|
|
заработало)))
|
Сообщ.
#8
,
|
|
|
Как ? Что сделал ?
|
Сообщ.
#9
,
|
|
|
воспользовался твоим советом
вот то что получилось TDBElTreeLink = class(TDataLink) private FElTree: TElTree; isInsert: Boolean; protected procedure UpdateData; override; procedure DataSetChanged; override; procedure EditingChanged; override; procedure DataSetScrolled(Distance: Integer); override; public constructor Create(AElTree: TElTree); property Tree: TElTree read FElTree; end; { TDBElTreeLink } constructor TDBElTreeLink.Create(AElTree: TElTree); begin inherited Create(); FElTree := AElTree; end; procedure TDBElTreeLink.DataSetChanged; //var // itm: TDBElTreeItem; // v: variant; begin inherited; if Tree.Items.Count > DataSet.RecordCount then begin Tree.UpdateItems; // for itm in Tree.Items do // begin // V := DataSet.Lookup(PrymaryKeyName, itm.ID, TextName); // if VarIsNull(V) then // begin // Tree.Items.RemoveItem(itm); // itm.Free; // end; // end; end; end; procedure TDBElTreeLink.DataSetScrolled(Distance: Integer); begin inherited; if FElTree.FLockUpdateDataSet then Exit; Tree.SelectItemID(DataSet.FieldByName(PrymaryKeyName).AsInteger); end; procedure TDBElTreeLink.EditingChanged; begin inherited; case DataSource.State of dsBrowse: isInsert := false; dsInsert: isInsert := true; end; end; procedure TDBElTreeLink.UpdateData; var item: TDBElTreeItem; begin inherited; if isInsert then begin item := Tree.GetItemByID(DataSet.FieldByName(PrymaryKeyName).AsInteger); if not Assigned(item) then item := (Tree.Items.Add(nil, '') as TDBElTreeItem); end else item := (Tree.Selected as TDBElTreeItem); item.LoadFromDataSet(DataSet); if Tree.Selected <> item then Tree.Selected := item; isInsert := false; end; |
Сообщ.
#10
,
|
|
|
procedure TDBElTreeLink.EditingChanged; begin inherited; isInsert := DataSource.State = dsInsert; end; |