whenever I was populating the DDL with the GV row data I was doing:
ddlHPRange.SelectedItem.Text = gvHeatPumpData.Rows[gvHeatPumpData.SelectedIndex].Cells[2].Text;
I've amended this to be now
ddlHPRange.SelectedValue = gvHeatPumpData.DataKeys[gvHeatPumpData.SelectedIndex].Values["HeatPumpRangeID"].ToString();
and now the ID is not blank when I'm saving any updates