x11 Posted May 5, 2020 Share Posted May 5, 2020 В рамках того, что UniGUI это не классическое VCL приложение и мы ничего не знаем, что там внутри под капотом, то есть такой вопрос. qData.DisableControls; try qData.Close; ... ... ... qData.Open; finally qData.EnableControls; end; Обязательно ли использовать эти VCL-ные методы? Или же UniGUI прекрасно обходится без DisableControls/EnableControls? Или нужно использовать какие-то другие методы? Например, у TUniDBGrid? Или ещё что-то? Quote Link to comment Share on other sites More sharing options...
x11 Posted May 5, 2020 Author Share Posted May 5, 2020 Дело в том, что после DataSet.EnableControls сетка не обновляется. Вернее не всегда обновляется. На сколько я смог понять, то после повторного переоткрытия DataSet`а сетка не обновляется. Приходится добавлять строку UniDBGrid.Refresh; Quote Link to comment Share on other sites More sharing options...
Sherzod Posted May 5, 2020 Share Posted May 5, 2020 3 minutes ago, x11 said: Дело в том, что после DataSet.EnableControls сетка не обновляется. Вернее не всегда обновляется. На сколько я смог понять, то после повторного переоткрытия DataSet`а сетка не обновляется. Приходится добавлять строку UniDBGrid.Refresh; Здравствуйте, Можете прикрепить тестовый случай..? Quote Link to comment Share on other sites More sharing options...
x11 Posted May 5, 2020 Author Share Posted May 5, 2020 Обратите внимание на события UniTabControl1Change и UniFormCreate. 1. В событии UniFormCreate создаем и наполняем ClientDataSet1. 2. В событии UniTabControl1Change переоткрытие набора данных ClientDataSet1 с использованием фильтра. Обратите внимание, что строка //UniDBGrid1.Refresh; закоментирована, поэтому данные в сетке не меняются. Но если раскоментировать, то при переключении между вкладками UniTabControl1 будет видно, что данные в сетке меняются. Или если строка UniDBGrid1.Refresh закоментирована, то после переключения между вкладками можно нажимать внизу сетки кнопку Refresh. unigui_event.zip Quote Link to comment Share on other sites More sharing options...
Sherzod Posted May 5, 2020 Share Posted May 5, 2020 7 minutes ago, x11 said: unigui_event.zip Думаю будет правильнее использовать так: ... ClientDataSet1.EnableControls; ClientDataSet1.Open; Quote Link to comment Share on other sites More sharing options...
x11 Posted May 5, 2020 Author Share Posted May 5, 2020 Нет. По идее, конструкция должна иметь вид: DisableControls; Try open; finally EnableControls end; Дело в том, что при Open может возникнуть исключение и сетка "зависнет" и не будет кликабельной. И чтобы сетка не была в подвисшем состоянии, последней инструкцией должна быть строка разблокировки DataSet.EnableControls. Quote Link to comment Share on other sites More sharing options...
x11 Posted May 5, 2020 Author Share Posted May 5, 2020 даже вот так должно быть DisableControls; Try try open; except обработка исключения end; finally EnableControls end; Quote Link to comment Share on other sites More sharing options...
Sherzod Posted May 5, 2020 Share Posted May 5, 2020 42 minutes ago, x11 said: даже вот так должно быть ОК, я открыл запрос. Я буду держать Вас в курсе. 1 Quote Link to comment Share on other sites More sharing options...
d.bernaert Posted June 29, 2021 Share Posted June 29, 2021 I'm having the same issue. Sometimes it works and sometimes not. Dominique Quote Link to comment Share on other sites More sharing options...
jrp Posted August 30, 2021 Share Posted August 30, 2021 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? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.