Any new Row that hasn't been saved to the underlying datasource should have a RowHandle less than zero. Knowing that, try this:
private void gvMain_ShowingEditor(object sender, CancelEventArgs e)
{
if (gvMain.FocusedRowHandle < 0 && gvMain.FocusedColumn == this.COLUMN_A)
{
//The user is attempting to edit Column A in a NEW ROW
e.Cancel = false;
}
else if (gvMain.FocusedRowHandle >= 0 && gvMain.FocusedColumn == this.COLUMN_A)
{
//The user is attempting to edit Column A in an EXISTING ROW
e.Cancel = true;
}
}
This approach assumes that your entire grid (that is, all columns) is set to Editable.