На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> TDataLink событие EditingChanged , узнать что происходит отмена
    написал наследника от TDataLink. перегрузил метод EditingChanged;
    как и положено он вызывается после того как TDataSet переходит в режим редактирования (или инсерта)
    тоже самое когда происходит post.
    как и положено строка активная та над которой проводятся "махинации".

    прикол начинается когда вызвать insert а потом cancel. статус как и положено dsBrows. но сама строка еще не "убрана" и она активная в данный момент.

    возможно ли как то узнать что в данный момент происходит отмена вставки?

    Добавлено
    пс. хотя наверное не в ту ветку запостил. просто я компонент пишу соответственно решил что и вопросик к компонентам. хотя сейчас сомнения берут.
    Сообщение отредактировано: ViktorXP -
      С таким подходом можно весь форум свалить в "Разработку компонентов", главное написать волшебную фразу.

      >возможно ли как то узнать что в данный момент происходит отмена вставки?
      >статус как и положено dsBrowse
        мне нужно после вставки строки добавить ветку в дереве а при отмене вставки не добавлять. ибо перегружать постоянно все дерево при изменении количества записей как то не красиво.
        dsBrowse и после Post и после Cancel;
        Сообщение отредактировано: DimaBr -
          Можно попробовать перекрыть DataEvent и запоминать последнее состояние dataseta, а уже в EditingChanged использовать этот флажок сравнив с текущим состоянием dataseta.
            и что мне это даст? я и из EditingChanged прекрасно могу запомнить что происходит insert или edit. у меня проблема с отловом post и cancel. при этих двух действиях в EditingChanged приходит dsBrowse. я бы не "парился" если бы новая строка исчезала бы при Cancel, но она не просто есть она даже активна в данный момент (в момент срабатывания EditingChanged ) хотя состояние dsBrowse.
              Например при Post-e происходит событие DataEvent(deUpdateRecord), а при Cancel нет
                заработало)))
                  Как ? Что сделал ?
                    воспользовался твоим советом
                    вот то что получилось
                    ExpandedWrap disabled
                        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;
                      ExpandedWrap disabled
                        procedure TDBElTreeLink.EditingChanged;
                        begin
                          inherited;
                          isInsert := DataSource.State = dsInsert;
                        end;
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0317 ]   [ 16 queries used ]   [ Generated: 24.04.24, 12:09 GMT ]