Jump to content

TDateSet DisableControls/EnableControls


x11

Recommended Posts

В рамках того, что UniGUI это не классическое VCL приложение и мы ничего не знаем, что там внутри под капотом, то есть такой вопрос.

  qData.DisableControls;
  try
    qData.Close;

    ...
    ...
    ...

    qData.Open;
  finally
    qData.EnableControls;
  end;

Обязательно ли использовать эти VCL-ные методы? Или же UniGUI прекрасно обходится без DisableControls/EnableControls?

Или нужно использовать какие-то другие методы? Например, у TUniDBGrid? Или ещё что-то?

Link to comment
Share on other sites

Дело в том, что после DataSet.EnableControls сетка не обновляется. Вернее не всегда обновляется. На сколько я смог понять, то после повторного переоткрытия DataSet`а сетка не обновляется.

Приходится добавлять строку UniDBGrid.Refresh;

 

Link to comment
Share on other sites

3 minutes ago, x11 said:

Дело в том, что после DataSet.EnableControls сетка не обновляется. Вернее не всегда обновляется. На сколько я смог понять, то после повторного переоткрытия DataSet`а сетка не обновляется.

Приходится добавлять строку UniDBGrid.Refresh;

Здравствуйте,

Можете прикрепить тестовый случай..?

Link to comment
Share on other sites

Обратите внимание на события UniTabControl1Change и UniFormCreate.

1. В событии UniFormCreate создаем и наполняем ClientDataSet1.

2. В событии UniTabControl1Change переоткрытие набора данных ClientDataSet1 с использованием фильтра.

Обратите внимание, что строка //UniDBGrid1.Refresh; закоментирована, поэтому данные в сетке не меняются. Но если раскоментировать, то при переключении между вкладками UniTabControl1 будет видно, что данные в сетке меняются.

Или если строка UniDBGrid1.Refresh закоментирована, то после переключения между вкладками можно нажимать внизу сетки кнопку Refresh.

unigui_event.zip

Link to comment
Share on other sites

Нет.

По идее, конструкция должна иметь вид:
 

DisableControls;

Try

  open;


finally

  EnableControls

end;

 

Дело в том, что при Open может возникнуть исключение и сетка "зависнет" и не будет кликабельной.

И чтобы сетка не была в подвисшем состоянии, последней инструкцией должна быть строка разблокировки DataSet.EnableControls.

 

Link to comment
Share on other sites

даже вот так должно быть

DisableControls;

Try

  try
    open;
  except
    обработка исключения
  end;


finally

  EnableControls

end;

 

Link to comment
Share on other sites

  • 1 year later...
  • 2 months later...
On 5/6/2020 at 3:41 AM, x11 said:

DisableControls;

Try

  open;


finally

  EnableControls

end;

 

 

I have this problem too in UniGUI 1.90.0.1551.

UniDBGrid would be empty after a code like above. I spent an hour to debug my application, only to find that the code like above (that works perfectly in VCL) is the culprit. It would work fine if I delete the Dataset.DisableControls;

Is it necessary or not to use Dataset.DisableControls and Dataset.EnableControls in UniGUI applications?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...