Sri Lanka, who won the toss and elected to bat in the day-night final, rode on Mahela Jayawardene's 103 not out off 88 balls to pile up 274-6 in their 50 overs.
India, cheered by a sell-out crowd of 33,000 at the Wankhede stadium, surpassed the challenging target with 10 balls to spare as Dhoni pounded Nuwan Kulasekara for the winning six.
India had slumped to 31-2 by the sixth over when sling-arm fast bowler Lasith Malinga dismissed Virender Sehwag (0) second ball and had star batsman Sachin Tendulkar (18) caught behind in his fourth over.
"I took a quite few decisions tonight and if we hadn't won I would have been asked quite a few questions," said Dhoni, who batted at number five and had selected fast bowler Shanthakumaran Sreesanth instead of Ravichandran Ashwin.
"Why no Ashwin? Why Sreesanth? Why no Yuvraj (at five)? Why did I bat ahead? That pushed me and motivated to do well.
"
Gambhir, who was dropped on 30 and escaped a run-out chance on 49, turned the match around by add