Beispiel #1
0
        ///<summary>
        ///从载入实时运行数据, 适用于批量处理载入。
        ///1. 使用rundataSelectAll获取DataTable
        ///2. 调用程序应根据dr中的id字段(rundataTableRelation.mainTable.keyFieldName指明了id字段名)查找对象obj
        ///3. 调用本方法填充运行数据
        ///</summary>
        void loadRundata(DataRow dr, PowerBasicObject obj, DataLayer.EReadMode readmode, bool isRealRun)
        {
            if (obj.busiRunData == null)
            {
                obj.busiRunData = createRundata(obj);
            }
            else
            if (obj.busiRunData.GetType().FullName != rundataTypeFullName)
            {
                System.Windows.MessageBox.Show("已有运行数据类型与描述不一致, 强制使用描述类型。" + key);
                obj.busiRunData = createRundata(obj);
            }

            foreach (DataColumn item in dr.Table.Columns)
            {
                PropertyDesc pd;
                if (readmode == DataLayer.EReadMode.数据库读取)
                {
                    pd = (isRealRun ? rundatadesces : planningdesces).FirstOrDefault(p => p.fieldname != null && p.fieldname.ToLower() == item.ColumnName.ToLower());
                }
                else
                {
                    pd = (isRealRun ? rundatadesces : planningdesces).FirstOrDefault(p => p.simFieldName != null && p.simFieldName.ToLower() == item.ColumnName.ToLower());
                }
                if (pd != null)
                {
                    setPropertyValue(obj.busiRunData, dr, pd, readmode);
                }
            }
        }
Beispiel #2
0
        ///<summary>设置属性值</summary>
        void setPropertyValue(object obj, DataRow dr, PropertyDesc pd, DataLayer.EReadMode readmode)
        {
            //反射设置属性值
            PropertyInfo pi            = obj.GetType().GetProperty(pd.propertyname);
            string       fieldtypename = readmode == DataLayer.EReadMode.模拟 ? pd.simtypename : pd.fieldtypename;
            string       fieldname     = readmode == DataLayer.EReadMode.模拟 ? pd.simFieldName : pd.fieldname;

            switch (pd.propertyTypeName)
            {
            case "Float":
                pi.SetValue(obj, getValueFromDB <float>(dr, fieldtypename, fieldname), null);
                break;

            case "Double":
                pi.SetValue(obj, getValueFromDB <double>(dr, fieldtypename, fieldname), null);
                break;

            case "Int32":
                pi.SetValue(obj, getValueFromDB <int>(dr, fieldtypename, fieldname), null);
                break;

            case "String":
                pi.SetValue(obj, getValueFromDB <string>(dr, fieldtypename, fieldname), null);
                break;

            case "Boolean":
                pi.SetValue(obj, getValueFromDB <bool>(dr, fieldtypename, fieldname), null);
                break;

            case "DateTime":
                pi.SetValue(obj, getValueFromDB <DateTime>(dr, fieldtypename, fieldname), null);
                break;

            default:      //zh注:枚举的处理,还要检查
                pi.SetValue(obj, getValueFromDB <int>(dr, fieldtypename, fieldname), null);
                break;
            }
        }