The Indian Border Security Force (BSF) official said that a suspected Islamist militant threw the grenade at a security patrol in Sopore town, 50 km north of Srinagar, the summer capital of the Indian state of Jammu and Kashmir.
Virender Manhas, the BSF spokesman, said: "Three BSF personnel and 18 civilians were wounded in the explosion. Security forces have laid siege to the area".
Three Indian paramilitary soldiers were among those wounded.
No group has claimed responsibility for the attack on Saturday.
A 17-year-old separatist revolt against New Delhi's rule has killed over 45,000 people in the strife-torn region claimed by both India and Pakistan.
Authorities say violence has steadily decreased since the two countries, which have fought two wars over Kashmir, began a peace process in 2004.
But people are still killed in daily shootouts and occasional grenade attacks.