It was Sri Lanka's second win in a row after the 16-run defeat of Pakistan in their opening match and helped them step closer to becoming the first team to take a berth in the June 24 final.
Bangladesh, who had lost to India on Wednesday, are virtually out of contention in the four-nation tournament.
Sri Lanka put on a dazzling batting performance to record the highest total ever at the Rangiri international stadium in Dambulla.
Dilshan and Upul Tharanga set the ball rolling with an opening stand of 111 by the 16th over after Sri Lankan captain Kumar Sangakkara won the toss and elected to bat in the day-night match.
Tharanga (54) and Sangakkara (52) hit half-centuries to build on Dilshan's aggressive knock which included 11 boundaries and a six.
Mahela Jayawardene chipped in with 43 during a third-wicket stand of 69 with Sangakkara.Angelo Mathews (42 not out) and Chamara Kapugedera (37 not out) hammered 73 runs in the last 10 overs to set Bangladesh a tough target of six runs an over under lights.
Bangladesh found the task beyond their reach despite a typically aggressive 51 off 53 balls by left-handed opener Tamim Iqbal.
Tamim put on 57 for the second wicket with Junaid Siddique (38) after opening partner Imrul Kayes was caught in the slips off Nuwan Kulasekera for three.
Bangladesh, who were 77-1 at one stage, lost five wickets for 66 runs as Dilshan and Muttiah Muralitharan sliced through the middle order.
Dilshan, bowling off-spin, sealed Bangladesh's fate in the space of nine deliveries when he had Tamim stumped by Sangakkara and then trapped Mohammad Ashraful leg-before.
Dilshan also removed Mushfiqur Rahim, while Muralitharan dismissed Junaid Siddique and skipper Shakib Al Hasan at the other end.