private void SaveDicomFieldValue(DicomTag tag, object value, bool createEmpty)
{
if (value != null && value != DBNull.Value) {
Type vtype = value.GetType();
if (vtype.IsSubclassOf(typeof(DcmElement))) {
AddItem((DcmItem)value);
} else {
if (!Contains(tag)) {
AddElement(tag, tag.Entry.DefaultVR);
}
DcmElement elem = GetElement(tag);
if (vtype.IsArray) {
if (vtype.GetElementType() != elem.GetValueType())
throw new DicomDataException("Invalid binding type for Element VR!");
if (elem.GetValueType() == typeof(DateTime))
(elem as DcmDateElementBase).SetDateTimes((DateTime[])value);
else
elem.SetValueObjectArray((object[])value);
} else {
if (elem.VR == DicomVR.UI && vtype == typeof(DicomUID)) {
DicomUID ui = (DicomUID)value;
elem.SetValueString(ui.UID);
} else if (elem.VR == DicomVR.UI && vtype == typeof(DicomTransferSyntax)) {
DicomTransferSyntax ts = (DicomTransferSyntax)value;
elem.SetValueString(ts.UID.UID);
}
else if (vtype == typeof(DcmDateRange) && elem.GetType().IsSubclassOf(typeof(DcmDateElementBase))) {
DcmDateRange dr = (DcmDateRange)value;
(elem as DcmDateElementBase).SetDateTimeRange(dr);
} else if (vtype != elem.GetValueType()) {
if (vtype == typeof(string)) {
elem.SetValueString((string)value);
} else
throw new DicomDataException("Invalid binding type for Element VR!");
} else {
elem.SetValueObject(value);
}
}
}
} else {
if (Contains(tag)) {
GetElement(tag).ByteBuffer.Clear();
} else if (createEmpty) {
AddElement(tag, tag.Entry.DefaultVR);
}
}
}