The serial numbers need to end up into your CustShip dataset - in your case is CT.SelectedSerialNumbers (I used tsCustShip instead of CT). Here is what I did:
First, I use the SelectedSerialNumbersSvcContract to create the table with all the serials (note below is from a function). Something like this (I have the serials incoming from a 3rd party system in a string vSerials separated by commas):
// call ssn service
this.CallService<Erp.Contracts.SelectedSerialNumbersSvcContract>(ssnc => {
// get sn format
ssnc.GetSerialNumFormat(ref tsSelSerials, vPartNo, String.Empty, String.Empty, 0, "yourplanthere");
// split the serials string by ,
tstr = ",";
char[] splto = tstr.ToCharArray();
string[] snos = vSerials.Split(splto, System.StringSplitOptions.RemoveEmptyEntries);
// add each serial to the tableset
int acnt = 0;
foreach (string sno in snos)
{
ssnc.AddSerialNum(ref tsSelSerials, vPartNo, String.Empty, String.Empty, 0, sno, Guid.Empty.ToString(), "STK-PCK", "yourplanthere");
acnt = acnt + 1;
}
Note that the SelectedSerialNumbers.SelectedSerialNumbers is NOT the same as CustShip.SelectedSerialNumbers. So, just before I call the second UpdateMaster to save the line, I populate the serials in the CustShip dataset based on the one above:
// copy all selected serials to custship tableset
for (int i=0; i<tsSelSerials.SelectedSerialNumbers.Count; i++)
{
var ssnrow = tsCustShip.SelectedSerialNumbers.NewRow();
ssnrow["Company"] = tsSelSerials.SelectedSerialNumbers[i].Company;
ssnrow["SerialNumber"] = tsSelSerials.SelectedSerialNumbers[i].SerialNumber;
ssnrow["Scrapped"] = tsSelSerials.SelectedSerialNumbers[i].Scrapped;
ssnrow["ScrappedReasonCode"] = tsSelSerials.SelectedSerialNumbers[i].ScrappedReasonCode;
ssnrow["Voided"] = tsSelSerials.SelectedSerialNumbers[i].Voided;
ssnrow["Reference"] = tsSelSerials.SelectedSerialNumbers[i].Reference;
ssnrow["ReasonCodeType"] = tsSelSerials.SelectedSerialNumbers[i].ReasonCodeType;
ssnrow["ReasonCodeDesc"] = tsSelSerials.SelectedSerialNumbers[i].ReasonCodeDesc;
ssnrow["PartNum"] = tsSelSerials.SelectedSerialNumbers[i].PartNum;
ssnrow["SNPrefix"] = tsSelSerials.SelectedSerialNumbers[i].SNPrefix;
ssnrow["SNBaseNumber"] = tsSelSerials.SelectedSerialNumbers[i].SNBaseNumber;
ssnrow["SourceRowID"] = Guid.Empty; //tsSelSerials.SelectedSerialNumbers[i].SourceRowID;
ssnrow["TransType"] = tsSelSerials.SelectedSerialNumbers[i].TransType;
ssnrow["PassedInspection"] = tsSelSerials.SelectedSerialNumbers[i].PassedInspection;
ssnrow["Deselected"] = tsSelSerials.SelectedSerialNumbers[i].Deselected;
ssnrow["KitWhseList"] = tsSelSerials.SelectedSerialNumbers[i].KitWhseList;
ssnrow["RawSerialNum"] = tsSelSerials.SelectedSerialNumbers[i].RawSerialNum;
ssnrow["KBLbrAction"] = tsSelSerials.SelectedSerialNumbers[i].KBLbrAction;
ssnrow["KBLbrActionDesc"] = tsSelSerials.SelectedSerialNumbers[i].KBLbrActionDesc;
ssnrow["PreventDeselect"] = tsSelSerials.SelectedSerialNumbers[i].PreventDeselect;
ssnrow["XRefPartNum"] = tsSelSerials.SelectedSerialNumbers[i].XRefPartNum;
ssnrow["XRefPartType"] = tsSelSerials.SelectedSerialNumbers[i].XRefPartType;
ssnrow["PreDeselected"] = tsSelSerials.SelectedSerialNumbers[i].PreDeselected;
ssnrow["poLinkValues"] = tsSelSerials.SelectedSerialNumbers[i].poLinkValues;
ssnrow["SNMask"] = tsSelSerials.SelectedSerialNumbers[i].SNMask;
ssnrow["NotSavedToDB"] = tsSelSerials.SelectedSerialNumbers[i].NotSavedToDB;
ssnrow["RowSelected"] = tsSelSerials.SelectedSerialNumbers[i].RowSelected;
ssnrow["SysRowID"] = Guid.Empty; //tsSelSerials.SelectedSerialNumbers[i].SysRowID;
ssnrow["RowMod"] = "A";
tsCustShip.SelectedSerialNumbers.Add(ssnrow);
}
Or you could just create the serials directly into the CustShip dataset (if possible or easier for you).