I think unable to solve it isn't correct... more too busy yesterday

1) datalist should be scoped as private
[Bindable] private var datalist:ArrayCollection = new ArrayCollection;
2) The reason the COLLECTION_CHANGE event is not firing is because you are creating a new ArrayCollection instance every time your service loads, your listener is referencing the ArrayCollection that was created when your app initialized - you now have lost your reference to this AC, but it will carry on persisting in memory through it's listener. If you need to use the COLLECTION_CHANGE listener, you need to maintain your original AC instance.
So you change your db2Result handler to something like this:
private function db2Result(e:ResultEvent):void
{
datalist.source = ( db2.lastResult.data.node as ArrayCollection ).source;
datalist.refresh();
lst.invalidateList();
}
As I said, I'd only do this if you absolutely need to do something with the COLLECTION_CHANGE event that can't be achieved with bindings.