コード例 #1
0
        internal static DataItem GetDataItemFromSource(DataRow dr, DataSchema schema)
        {
            DataItem item = new DataItem(schema);

            for (int i = 0; i < schema.Fields.Length; i++)
            {
                if (!schema.Fields[i].Skip)
                {
                    object v;
                    string replaced     = schema.Fields[i].GetAnyAttributeValue("replaced");
                    string defaultvalue = schema.Fields[i].GetAnyAttributeValue("default");
                    try
                    {
                        v = dr[schema.Fields[i].Source];
                    }
                    catch (ArgumentException)
                    {
                        // 该列不存在
                        if (defaultvalue != null)
                        {
                            v = defaultvalue;
                        }
                        else
                        {
                            throw new System.Exception(string.Format("没有找到数据列'{0}'.", schema.Fields[i].Source));
                        }
                    }
                    // 如果存在被替换值和默认值,则将被替换值替换为默认值
                    if (!string.IsNullOrEmpty(v as string) && v != DBNull.Value && !string.IsNullOrEmpty(replaced) && replaced.IndexOf(v.ToString()) != -1 &&
                        defaultvalue != null)
                    {
                        v = defaultvalue;
                    }
                    DataItemField f = item.GetSourceField(schema.Fields[i].Source);
                    f.Value = v;

                    // 如果该项验证失败, 且为DataFixMode.Fix, 且有默认值, 则以默认值代替
                    if (!string.IsNullOrEmpty(schema.TransferMode) && schema.TransferMode.Equals("fix", StringComparison.InvariantCultureIgnoreCase) && defaultvalue != null)
                    {
                        ValidationResults vr = new ValidationResults();
                        f.DoValidate(vr);
                        if (!vr.IsValid && f.Value as string != v as string)
                        {
                            f.Value = v;
                        }
                    }
                }
            }

            return(item);
        }
コード例 #2
0
        /// <summary>
        /// in case trim
        /// </summary>
        /// <param name="itemfield"></param>
        public static void AdjustDataItemFieldValue(DataItemField itemfield)
        {
            if (itemfield.Value == null)
            {
                return;
            }

            if (itemfield.Type.Equals(typeof(int).ToString()))
            {
                int val1;
                if (StringUtil.TryParseInt32(itemfield.Value.ToString(), out val1))
                {
                    itemfield.Value = val1;
                }
                else
                {
                    throw new InvalidDataException(
                              string.Format("fields value [{0}] can not parse as type of schema: name [{1}] index[{2}] type [{3}]",
                                            itemfield.Value,
                                            itemfield.Name, itemfield.Index, itemfield.Type));
                }
            }
            else if (itemfield.Type.Equals(typeof(double).ToString()))
            {
                double val2;
                if (StringUtil.TryParseDouble(itemfield.Value.ToString(), out val2))
                {
                    itemfield.Value = val2;
                }
                else
                {
                    throw new InvalidDataException(
                              string.Format("fields value [{0}] can not parse as type of schema: name [{1}] index[{2}] type [{3}]",
                                            itemfield.Value,
                                            itemfield.Name, itemfield.Index, itemfield.Type));
                }
            }
            else if (itemfield.Type.Equals(typeof(DateTime).ToString()))
            {
                DateTime val3;
                if (StringUtil.TryParseDateTime(itemfield.Value.ToString(), out val3))
                {
                    itemfield.Value = val3;
                }
                else
                {
                    throw new InvalidDataException(
                              string.Format("fields value [{0}] can not parse as type of schema: name [{1}] index[{2}] type [{3}]",
                                            itemfield.Value,
                                            itemfield.Name, itemfield.Index, itemfield.Type));
                }
            }
            else if (itemfield.Type.Equals(typeof(string).ToString()) && itemfield.Value != null)
            {
                itemfield.Value = itemfield.Value.ToString().Trim();
            }
            else
            {
                // TODO: handle more types
            }
        }