India bowled out Sri Lanka for 213, then knocked off the runs with more than 17 overs to spare.
Gambhir hit 71, as did the unbeaten Kohli.
Gambhir enjoyed let-offs when he was on 41 and 43, dropped respectively by Tillakaratne Dilshan and Upul Tharanga at cover-point and mid-wicket in successive overs of Thilan Thushara.
He put on 89 with Dinesh Karthik for the opening wicket before adding 72 with Kohli. Karthik, playing for rested regular opener Virender Sehwag, made 48.
Earlier, half-centuries from skipper Kumar Sangakkara (68) and all-rounder Suraj Randiv (56) steadied Sri Lanka who were in deep trouble at 84 for six.
India play Bangladesh in their final round-robin match on Monday before meeting Sri Lanka in the final on Wednesday.
Keep up with the latest business news from the region with the Emirates Business 24|7 daily newsletter. To subscribe to the newsletter, please click here.
Follow Emirates 24|7 on Google News.