The day-night contest at the R Premadasa Stadium saw India take a 2-1 lead in the five-match series. It went to the final over and India succeeded in the chase with two balls to spare. Irfan Pathan won the game with a boundary off Angelo Mathews on the fourth ball of the 50th over.
To add to the hosts' loss, Sri Lanka will be without their batsman Kumar Sangakkara who has been ruled out for four to six weeks after fracturing his finger during batting today. When on 24, he was hit by a bouncer from Ashok Dinda.
Chasing 287, India were in a spot of bother at 196/5 in 38.3 overs. But Raina and Irfan played sensibly to take India to victory. Both remained unbeaten. They had a match-winning unbroken partnership of 92 runs in 11.1 overs.
It was Gambhir who stole the show in the Indian innings and later Raina ensured that the opener's 11th ODI ton did not go waste.
Left-handed Gambhir was the fifth Indian wicket to fall. He was run out for 102. At that stage, India still were 91 runs away from the target.
Gambhir took 101 balls for his 102 and had 10 boundaries in his knock.
Rohit Sharma's woeful run with the bat continued as he was dismissed for a golden duck by Lasith Malinga.
In three games, he has scored just five runs and two ducks. The right-hander might be axed from the next game and Manoj Tiwary could come in the playing XI.
Many were surprised that Rohit had not been dropped for this game. In his last 13 innings, he has only one half century.
Sri Lanka Innings Report
Riding high on Angelo Mathews and Kumar Sangakkara's knocks, Sri Lanka posted 286/5 in their 50 overs against India in the third ODI at Colombo on Saturday. India need 287 to win and take a lead in the series.
After a shaky start, captain Mahela Jayawardene and Sangakkara ensured that Sri Lanka would not lose any wickets as they added 121 runs for the fourth wicket which also happens to be the team's highest partnership against India.
Moreover, it was their 14th 100 plus partnership in the 125 innings together, one of the best as the team had lost 3 wickets within the first six overs and when India were on a roll claiming the top order early in the innings, the duo ensured they did not play any risky shots but kept the score board ticking.
Jayawardene, scored his 68th fifty in ODIs during his knock of 65, while Sangakkara also made his 73rd half century in ODIs during his knock of 73 which included 5 boundaries.
Apart from that partnership, Jeevan Mendis(45 not out) and Angelo Mathews (71 not out) added 104 runs to guide Lanka to 286/5.
Earlier in the day, Sri Lanka won the toss and elected to bat first to post 286/5 in their quota of 50 overs. Zaheer Khan's double helped India return with a bang as Lanka had lost openers Tillakaratne Dilshan (4) and Upul Tharanga (8) within 5 overs while Irfan Pathan also responded to MS Dhoni's call as he dismissed Chandimal for a nought in the sixth over.
Though Dinda and Rahul Sharma managed to claim a wicket each, Dinda in particular leaked a lot of runs which saw India conceded 97 runs in the last 10 overs as Angelo Mathews and Jeevan Mendis recorded their team's highest sixth wicket partnership against India (104 runs for the 6th wicket).
With 287 needed to win the third ODI, India need to bat well in order to win this ODI as it is not going to be a cake walk against a attacking pace attack.
India: MS Dhoni (captain), Virender Sehwag, Gautam Gambhir, Virat Kohli (vice-captain), Rohit Sharma, Suresh Raina, Irfan Pathan, Ravichandran Ashwin, Zaheer Khan, Rahul Sharma, Ashok Dinda.
Sri Lanka: Mahela Jayawardene (captain), Angelo Mathews (vice-captain), Tillakaratne Dilshan, Kumar Sangakkara, Upul Tharanga, Dinesh Chandimal, Thisara Perera, Jeevan Mendis, Lasith Malinga, Rangana Herath, Isuru Udana
Umpires: Kumar Dharmasena (Sri Lanka) and Bruce Oxenford (Australia)
Third Umpire: Ranmore Martinesz (Sri Lanka)
Match referee: Chris Broad (England)