Some screenshots would really help here. 🙂
A couple of things based on some assumptions I'm making from what you've provided:
The Param function will be text, not a number, even if the SONumber is a number. So if your datasource's SONumber data type is a number, you'll need to refer to it as Value(Param("SONumber")
Also, in my experience, instead of using ThisItem to refer to a record, I would explicitly do a LookUp of the record instead to make sure the schema stays the same: {SONumber: LookUp(dataname, ID=ThisItem.ID)}...
Although there's nothing wrong with using 2 different forms for the data entry & view/edit, you can always chose to hide fields on the NewForm based on the form's FormMode property: datacard.Visible: frmMyForm.Mode=FormMode.Edit || frmMyForm.Mode = FormMode.View will only show the data card if the form's mode is not New