Alexandre, because it's hard to do a test case of what I'm experience in this case, I managed to get a workaround to solve my problem.
When I refresh my grid, there are some validations in between and some code to start the working in progress animation (start ans stop) and for that, I'm using some TIWTimers to accomplish those tasks.
So, after all that, I add another TIWTimer where I just do this:
BtnCarrinho.Caption := BtnCarrinho.Caption;
and this way, the TIWBSButton updates like it should.
So, definitly, there's something that was changed with IW, that bricked what worked perfectly fine.
What I can say more is that, since I start my IWDBGrid refresh, validations, start and stop my working in progress animations, etc...I'm changing one or two times, the caption of that TIWBSButton and his Enabled property to, depending on my validations. I thing that it's here where the problem resides.
If I comment those lines of code:
...my example code...
start worjing in progress animation;
dataset close;
query construct;
dataset open;
apply filter;
//IIWBSButton.Caption := 'Some caption';
...
//TIWBSButton.Enabled := Some condition;
...stop animation
If I do this, the TIWBSButton updates and behaves correctly.
Hope it helps because the only solution was to sent you all my code and databases