/// <summary> /// Copy attribute fields only. /// </summary> /// <param name="rowSrc"></param> /// <param name="rowDest"></param> public void CopyFieldsValue(IRow rowSrc, IRow rowDest) { IFields fieldsSrc = rowSrc.Fields; IFields fieldsDest = rowDest.Fields; IField fieldSrc; IField fieldDest; int inxFieldSrc = -1; Func <IRow, int, object> funcConvertValue; // Loop Dest fields for (int i = 0; i < fieldsDest.FieldCount; i++) { fieldDest = fieldsDest.Field[i]; if (!fieldDest.Editable) { continue; } if (SkipFields.Contains(fieldDest.Name.ToUpper())) { continue; } inxFieldSrc = fieldsSrc.FindField(fieldDest.Name); if (inxFieldSrc != -1) { if (!DictConvertRowFieldValueFunc.ContainsKey(fieldDest.Name.ToUpper())) { rowDest.Value[i] = rowSrc.Value[inxFieldSrc]; } else { funcConvertValue = DictConvertRowFieldValueFunc[fieldDest.Name.ToUpper()]; rowDest.Value[i] = funcConvertValue(rowSrc, inxFieldSrc); } } } }
/// <summary> /// Copy ShapeField Value, support source IRow, IFeature /// </summary> /// <param name="rowSrc"></param> /// <param name="ftDest"></param> public void CopyShapeFieldValue(IRow rowSrc, IFeature ftDest) { if (!DictConvertRowFieldValueFunc.ContainsKey(ShapeFieldName.ToUpper())) { if (rowSrc is IFeature) { IFeature ftSrc = rowSrc as IFeature; ftDest.Shape = ftSrc.Shape; } else { // src is table (don't have geometry) // do nothing } } else { var funcConvertValue = DictConvertRowFieldValueFunc[ShapeFieldName.ToUpper()]; int inxShapeField = rowSrc.Fields.FindField(ShapeFieldName); ftDest.Shape = funcConvertValue(rowSrc, inxShapeField) as IGeometry; } }