There are no selected rows. Therefore, when you try to access the first element of the array, it throws an exception.
This frequently occurs during SelectedValueChanged events when the application starts, becasue at that stage there are no selected items.
Always check first:
if (e.ColumnIndex >= 0 && grid_emp_display.SelectedRows.Count > 0)
{
DataRowView row = grid_emp_display.SelectedRows[0].DataBoundItem as DataRowView;
Gratuity_frm frm = new Gratuity_frm();
frm.row = row;
frm.ShowDialog();
}