| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- using Core.Mes.Client.Comm.Control;
- using Core.Mes.Client.Comm.Tool;
- using CoreFS.SA06;
- using Infragistics.Win.UltraWinGrid;
- using System;
- using System.Reflection;
- using System.Windows.Forms;
- //Create By Cx 2015年1月17日 14:12:40
- namespace Core.StlMes.Client.Qcm
- {
- /// <summary>
- /// 通用实体类转换器(前提条件:实体类设置了转换器所需要的特性)
- /// </summary>
- /// <typeparam name="Tobj"></typeparam>
- class FrmDtConverter<Tobj>
- {
- /// <summary>
- /// UltraGridRow转换为实体类,并验证是否为空。所能识别的特性:FieldAttribute, FieldAttributeType, NullableAttribute, CoreUserInfo。
- /// </summary>
- /// <param name="grid"></param>
- /// <param name="TObj"></param>
- /// <returns></returns>
- public Tobj Convert(UltraGridRow row, CoreUserInfo userInfo, FieldAttributeType fieldAttributeType)
- {
- Type type = typeof(Tobj);
- Tobj obj = (Tobj)type.Assembly.CreateInstance(type.FullName);
- PropertyInfo[] propertyInfos = type.GetProperties();
- foreach (PropertyInfo propertyInfo in propertyInfos)
- {
- SetUserInfo(obj, propertyInfo, userInfo);//设置用户信息。
- object[] objs = propertyInfo.GetCustomAttributes(typeof(FieldAttribute), true);
- if (objs.Length > 0)
- {
- FieldAttribute fieldAttribute = (FieldAttribute)objs[0];
- if ((fieldAttribute.FieldAttributeType & fieldAttributeType) != fieldAttributeType) continue; //如果该属性没有指定的字段类型则跳过。
- string columnName = fieldAttribute.FieldName == "" ? GetColumnName(row, propertyInfo.Name) : fieldAttribute.FieldName.ToUpper();
- if (row.Cells.Exists(columnName) == false)
- {
- throw new Exception("实体类定义了字段名特性,但在Grid中没有找到该列名!");
- }
- if (fieldAttribute.IsGetValue == true)
- {
- propertyInfo.SetValue(obj, row.Cells[columnName].Value.ToString(), null);
- }
- else
- {
- propertyInfo.SetValue(obj, row.Cells[columnName].Text.ToString(), null);
- }
- if (CheckIsNull(obj, propertyInfo) == true)
- {
- MessageUtil.ShowWarning(row.Cells[columnName].Column.Header.Caption + "不能为空!");
- row.Activate();
- row.Cells[columnName].Activate();
- return default(Tobj); //引用类型返回null
- }
- }
- }
- return obj;
- }
- private string GetColumnName(UltraGridRow row, string propertyName)
- {
- foreach (UltraGridCell cell in row.Cells)
- {
- string columName = "";
- string[] strAry = cell.Column.Key.Split('_');
- for (int i = 0; i < strAry.Length; i++)
- {
- columName += strAry[i].Substring(0, 1).ToUpper() + strAry[i].Substring(1).ToLower();
- }
- if (columName == propertyName)
- {
- return cell.Column.Key;
- }
- }
- return "";
- }
- private bool CheckIsNull(Tobj obj, PropertyInfo propertyInfo)
- {
- object[] objs = propertyInfo.GetCustomAttributes(typeof(NullableAttribute), true);
- if (objs.Length > 0)
- {
- NullableAttribute nullableAttribute = (NullableAttribute)objs[0];
- if (nullableAttribute.Nullable == false
- && (propertyInfo.GetValue(obj, null) == null || propertyInfo.GetValue(obj, null).ToString() == ""))
- {
- return true;
- }
- }
- return false;
- }
- private void SetUserInfo(Tobj obj, PropertyInfo propertyInfo, CoreUserInfo userInfo)
- {
- object[] objs = propertyInfo.GetCustomAttributes(typeof(UserInfoAttribute), true);
- if (objs.Length > 0)
- {
- UserInfoAttribute userInfoAttribute = (UserInfoAttribute)objs[0];
- string strUserInfo = "";
- switch (userInfoAttribute.UserInfoAttributeType)
- {
- case UserInfoAttributeType.Department:
- strUserInfo = userInfo.GetDepartment();
- break;
- case UserInfoAttributeType.Deptid:
- strUserInfo = userInfo.GetDeptid();
- break;
- case UserInfoAttributeType.GuidCode:
- strUserInfo = userInfo.GetGuidCode();
- break;
- case UserInfoAttributeType.LoginID:
- strUserInfo = userInfo.GetLoginID();
- break;
- case UserInfoAttributeType.LoginTime:
- strUserInfo = userInfo.GetLoginTime();
- break;
- case UserInfoAttributeType.MachineIP:
- strUserInfo = userInfo.GetMachineIP();
- break;
- case UserInfoAttributeType.MachineName:
- strUserInfo = userInfo.GetMachineName();
- break;
- case UserInfoAttributeType.PurviewInfo:
- strUserInfo = userInfo.GetPurviewInfo();
- break;
- case UserInfoAttributeType.Role:
- strUserInfo = userInfo.GetRole();
- break;
- case UserInfoAttributeType.UserGroup:
- strUserInfo = userInfo.GetUserGroup();
- break;
- case UserInfoAttributeType.UserGroupText:
- strUserInfo = userInfo.GetUserGroupText();
- break;
- case UserInfoAttributeType.UserID:
- strUserInfo = userInfo.GetUserID();
- break;
- case UserInfoAttributeType.UserName:
- strUserInfo = userInfo.GetUserName();
- break;
- case UserInfoAttributeType.UserOrder:
- strUserInfo = userInfo.GetUserOrder();
- break;
- case UserInfoAttributeType.UserOrderText:
- strUserInfo = userInfo.GetUserOrderText();
- break;
- }
- propertyInfo.SetValue(obj, strUserInfo, null);
- }
- }
- /// <summary>
- /// Control中的控件集合转换为实体类,并验证是否为空。所能识别的特性:ControlAttribute, ControlAttributeType, NullableAttribute, CoreUserInfo。
- /// </summary>
- /// <param name="grid"></param>
- /// <param name="TObj"></param>
- /// <returns></returns>
- public Tobj Convert(System.Windows.Forms.Control parentControl, CoreUserInfo userInfo, ControlAttributeType controlAttributeType)
- {
- Type type = typeof(Tobj);
- Tobj obj = (Tobj)type.Assembly.CreateInstance(type.FullName);
- PropertyInfo[] propertyInfos = type.GetProperties();
- foreach (PropertyInfo propertyInfo in propertyInfos)
- {
- SetUserInfo(obj, propertyInfo, userInfo);//设置用户信息。
- object[] objs = propertyInfo.GetCustomAttributes(typeof(ControlAttribute), true);
- if (objs.Length > 0)
- {
- ControlAttribute controlAttribute = (ControlAttribute)objs[0];
- if ((controlAttribute.ControlAttributeType & controlAttributeType) != controlAttributeType) continue; //如果该属性没有指定的字段类型则跳过。
- string controlName = controlAttribute.ControlName;
- System.Windows.Forms.Control[] childControls = parentControl.Controls.Find(controlName, true);
- System.Windows.Forms.Control childControl = null;
- if (childControls.Length == 0)
- {
- throw new Exception("实体类定义了字段名特性,但在parentControl中没有找到该控件名称!");
- }
- else
- {
- childControl = childControls[0];
- }
- string strValue = GetControlValue(childControl, controlAttribute.IsGetValue);
- propertyInfo.SetValue(obj, strValue, null);
- if (CheckIsNull(obj, propertyInfo) == true)
- {
- if (childControl is LabelControlInterface)
- {
- LabelControlInterface labelControl = (LabelControlInterface)childControl;
- if (labelControl is LabelComboBox)
- {
- MessageUtil.ShowWarning("请选择" + labelControl.Caption + "!");
- }
- else
- {
- MessageUtil.ShowWarning(labelControl.Caption + "不能为空!");
- }
- }
- else
- {
- throw new Exception(childControl.Name + ":不能为空!");
- }
- childControl.Focus();//combobox下拉
- return default(Tobj); //引用类型返回null
- }
- }
- }
- return obj;
- }
- private string GetControlValue(System.Windows.Forms.Control control, bool isGetValue)
- {
- switch (control.GetType().FullName)
- {
- case "System.Windows.Forms.TextBox":
- return ((TextBox)control).Text.Trim();
- case "System.Windows.Forms.ComboBox":
- if (isGetValue)
- {
- if (((ComboBox)control).SelectedValue != null)
- {
- return ((ComboBox)control).SelectedValue.ToString();
- }
- break;
- }
- else
- {
- return ((ComboBox)control).Text.Trim();
- }
- case "Core.Mes.Client.Comm.Control.DataFilterControl":
- if (isGetValue)
- {
- if (((DataFilterControl)control).SelectedValue != null)
- {
- return ((DataFilterControl)control).SelectedValue.ToString();
- }
- break;
- }
- else
- {
- return ((DataFilterControl)control).Text.Trim();
- }
- case "Core.Mes.Client.Comm.Control.LabelComboBox":
- if (isGetValue)
- {
- if (((LabelComboBox)control).SelecteValue != null)
- {
- return ((LabelComboBox)control).SelecteValue.ToString();
- }
- break;
- }
- else
- {
- return ((LabelComboBox)control).Text.Trim();
- }
- case "Core.Mes.Client.Comm.Control.LabelTextBox":
- return ((LabelTextBox)control).Text.Trim();
- case "Core.Mes.Client.Comm.Control.LabelCheckBox":
- return ((LabelCheckBox)control).Checked.ToString();
- case "Core.Mes.Client.Comm.Control.LabelNumericText":
- return ((LabelNumericText)control).Value.ToString().Trim();
- case "Core.Mes.Client.Comm.Control.LabelDateTimePicker":
- return ((LabelDateTimePicker)control).Value.ToString("yyyy-MM-dd HH:mm:ss");
- }
- return "";
- }
- }
- }
|