I think you are getting index out of range.
In My opinion instead of deleting row from the grid view as it is binded to a data source try to delete the data from that Data source itself and rebind your grid view.
protected void cmdDiseaseDel_Click(object sender, EventArgs e)
{
List<fmldiseasehist> fmlDiseaseList = new List<fmldiseasehist>();
CheckBox chk = new CheckBox();
if (chkDelMandatory ()== true)
{
foreach (GridViewRow gvr in grdFmlHist.Rows)
{
chk = (CheckBox)(gvr.Cells[0].FindControl("chkSelect"));
if (chk.Checked == true)
{
string item=grdFmlHist.Rows[e.RowIndex].Cells[yourDataCells].Text;
}
}
}
protected void grdFmlHist_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
e.Cancle=true;
}</fmldiseasehist></fmldiseasehist>
Hope this might help you.