Hi Linh,
Have you tried with BOOperation READ?
It actually works for me. And I think that is a good way.
1. Bind Root with Custom BO
2. Bind DataList with Custom Query
3. Bind a data field under Datalist with the NodeID from Custom Query.
4. Create an event handler.
5. Add BOOperation READ and read Custom BO using NodeID
6. Add delete BOAction with instance binding to ROOT.
Dont forget to check "Save After Execution".
The delete BOAction should only include (this.Delete() ).
I recommend to recreate the UIs and test.
Good luck,
Fred