using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using Core.Mes.Client.Comm.Server; using CoreFS.CA06; using Infragistics.Win; using Infragistics.Win.UltraWinEditors; using Infragistics.Win.UltraWinGrid; using System.Text.RegularExpressions; using Core.Mes.Client.Comm.Tool; using System.Reflection; using System.Windows.Forms; namespace Core.StlMes.Client.PlnSaleOrd.炼钢计划 { public class SteelHelper { /// /// 初始化产线下拉框 /// /// 下拉框 /// 工序 /// OpeBase public static void InitPline(UltraComboEditor uce, string processCode, OpeBase ob) { DataTable dt = ServerHelper.GetData("com.steering.pss.plnsaleord.steelMarkingPlan.SteelHelper.initPline", new object[] {processCode}, ob); uce.DropDownListWidth = -1; //uce.DropDownStyle = DropDownStyle.DropDownList; uce.DataSource = dt; uce.DisplayMember = "PLINE_NAME"; uce.ValueMember = "PLINE_CODE"; uce.SelectedIndex = 0; } /// /// 初始化产线下拉框 /// /// 下拉框 /// 工序 /// OpeBase public static void InitPline2(UltraComboEditor uce, string processCode, OpeBase ob) { DataTable dt = ServerHelper.GetData("com.steering.pss.plnsaleord.steelMarkingPlan.SteelHelper.initPline", new object[] { processCode }, ob); DataRow dr = dt.NewRow(); dr[0] = ""; dr[1] = "离线库"; dt.Rows.Add(dr); uce.DropDownListWidth = -1; //uce.DropDownStyle = DropDownStyle.DropDownList; uce.DataSource = dt; uce.DisplayMember = "PLINE_NAME"; uce.ValueMember = "PLINE_CODE"; uce.SelectedIndex = 0; } /// /// 初始化工序下拉框 /// /// 下拉框 /// 工序 /// OpeBase public static void InitProcess(UltraComboEditor uce, string processCode,OpeBase ob) { DataTable dt = ServerHelper.GetData("com.steering.pss.plnsaleord.steelMarkingPlan.SteelHelper.initProcess", new object[] { processCode }, ob); uce.DropDownListWidth = -1; uce.DropDownStyle = DropDownStyle.DropDownList; uce.DataSource = dt; uce.DisplayMember = "PROCESS_DESC"; uce.ValueMember = "PROCESS_CODE"; uce.SelectedIndex = 0; } /// /// 初始化余材类型 /// /// public static void InitSurplusType(UltraComboEditor uce) { //余材类型(1生产超量2开浇加量3尾炉加量45) DataTable dt = new DataTable(); dt.Columns.Add("SURPLUS_TYPE_NAME"); dt.Columns.Add("SURPLUS_TYPE_CODE"); DataRow dr1 = dt.NewRow(); dr1["SURPLUS_TYPE_NAME"] = "生产超量"; dr1["SURPLUS_TYPE_CODE"] = "1"; dt.Rows.Add(dr1); DataRow dr2 = dt.NewRow(); dr2["SURPLUS_TYPE_NAME"] = "开浇加量"; dr2["SURPLUS_TYPE_CODE"] = "2"; dt.Rows.Add(dr2); DataRow dr3 = dt.NewRow(); dr3["SURPLUS_TYPE_NAME"] = "尾炉加量"; dr3["SURPLUS_TYPE_CODE"] = "3"; dt.Rows.Add(dr3); DataRow dr4 = dt.NewRow(); dr4["SURPLUS_TYPE_NAME"] = "连浇前炉加量"; dr4["SURPLUS_TYPE_CODE"] = "4"; dt.Rows.Add(dr4); DataRow dr5 = dt.NewRow(); dr5["SURPLUS_TYPE_NAME"] = "连浇后炉加量"; dr5["SURPLUS_TYPE_CODE"] = "5"; dt.Rows.Add(dr5); uce.DataSource = dt; uce.DisplayMember = "SURPLUS_TYPE_NAME"; uce.ValueMember = "SURPLUS_TYPE_CODE"; } /// /// (删除修改新增)涉及事务处理方法 /// /// 方法ID /// 参数 /// OpeBase /// string[] 第一个参数 true/false 第二个参数 返回提示信息 public static string[] SetData(string methodId, object[] param, OpeBase ob) { CoreClientParam ccp = new CoreClientParam(); ccp.ServerName = methodId.Substring(0, methodId.LastIndexOf(".")); ccp.MethodName = methodId.Substring(methodId.LastIndexOf(".") + 1); ccp.ServerParams = param; ccp = ob.ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode == -1) { return null; } else { string[] strArray = new string[2]; strArray[0] = ccp.ReturnObject.ToString(); strArray[1] = ccp.ReturnInfo; return strArray; } } /// /// (删除修改新增)涉及事务处理方法 /// /// 方法ID /// 参数 /// OpeBase /// string[] 第一个参数 true/false 第二个参数 返回提示信息 public static object[] SetDataReturnData(string methodId, object[] param, OpeBase ob) { CoreClientParam ccp = new CoreClientParam(); ccp.ServerName = methodId.Substring(0, methodId.LastIndexOf(".")); ccp.MethodName = methodId.Substring(methodId.LastIndexOf(".") + 1); ccp.ServerParams = param; ccp = ob.ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode == -1) { return null; } else { object[] strArray = new object[2]; strArray[0] = ccp.ReturnObject; strArray[1] = ccp.ReturnInfo; return strArray; } } /// /// 验证字符串是否是数字 /// /// 字符串 /// bool public static bool IsNum(string str) { try { double a = Convert.ToDouble(str); } catch (Exception e) { return false; } return true; } /// 初始化钢种 /// /// 下拉框 /// OpeBase public static void InitGrade(UltraComboEditor uce, OpeBase ob) { DataTable dt = ServerHelper.GetData("com.steering.pss.plnsaleord.steelMarkingPlan.SteelHelper.initGrade", new object[] { }, ob); uce.DropDownListWidth = -1; uce.DataSource = dt; uce.DisplayMember = "GRADENAME"; uce.ValueMember = "GRADECODE"; } /// /// 从服务端查询数据(query) /// /// 服务端MethodId /// 参数数组,需与服务端方法参数一致 /// 界面OB对象 /// 自定义异常 /// 查询数据集 public static object GetData(string methodId, object[] param, OpeBase ob) { CoreClientParam ccp = new CoreClientParam(); ccp.ServerName = methodId.Substring(0, methodId.LastIndexOf(".")); ccp.MethodName = methodId.Substring(methodId.LastIndexOf(".") + 1); ccp.ServerParams = param; ccp = ob.ExecuteSortResultByQueryToDataTable(ccp, CoreInvokeType.Internal); if (ccp == null) { throw null; } return ccp.ReturnObject; } /// /// 初始化状态 /// /// public static void InitStatus(UltraComboEditor uce) { //状态(0=组炉,1=组浇,2=下发,3生产中,4生产完成) DataTable dt = new DataTable(); dt.Columns.Add("STATUS"); dt.Columns.Add("STATUS_CODE"); DataRow dr1 = dt.NewRow(); dr1["STATUS"] = "组炉"; dr1["STATUS_CODE"] = "0"; dt.Rows.Add(dr1); DataRow dr2 = dt.NewRow(); dr2["STATUS"] = "组浇"; dr2["STATUS_CODE"] = "1"; dt.Rows.Add(dr2); DataRow dr3 = dt.NewRow(); dr3["STATUS"] = "下发"; dr3["STATUS_CODE"] = "2"; dt.Rows.Add(dr3); DataRow dr4 = dt.NewRow(); dr4["STATUS"] = "生产中"; dr4["STATUS_CODE"] = "3"; dt.Rows.Add(dr4); DataRow dr5 = dt.NewRow(); dr5["STATUS"] = "生产完成"; dr5["STATUS_CODE"] = "4"; dt.Rows.Add(dr5); uce.DataSource = dt; uce.DisplayMember = "STATUS"; uce.ValueMember = "STATUS_CODE"; } /// /// 初始化下拉框 /// /// 下拉框 /// 请求的服务 /// 值成员 /// ob对象 /// 是否有空行 public static void InitComboEditor(UltraComboEditor uce, string methodId, string valueMember, OpeBase ob, bool isEmpty) { DataTable dt = ServerHelper.GetData(methodId, new object[]{""}, ob); if (dt != null && dt.Rows.Count > 0) { if (isEmpty) { Object[] obj = new Object[] { "", "" }; DataRow dr = dt.NewRow(); dr.ItemArray = obj; dt.Rows.InsertAt(dr, 0); } uce.DataSource = dt; uce.ValueMember = valueMember; SetComboItemHeight(uce); } } /// /// 将下拉框绑定到GRID列 /// /// 下拉框(已经初始化完成) /// 列名 /// 空间集合(每次只需填入this.Controls) /// GRID /// GRID的第几层结构 public static void BindColumn(UltraComboEditor uce, string ColumnName, System.Windows.Forms.Control.ControlCollection con, UltraGrid ug, int i) { con.Add(uce); uce.Visible = false; ug.DisplayLayout.Bands[i].Columns[ColumnName].EditorComponent = uce; ug.DisplayLayout.Bands[i].Columns[ColumnName].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.DropDown; SetComboItemHeight(uce); } /// /// 设置UltraComboEditor中的中文和非中文统一高度。 /// /// public static void SetComboItemHeight(UltraComboEditor cmb) { foreach (ValueListItem item in cmb.Items) { if (Regex.IsMatch(item.DisplayText, @"[\u4e00-\u9fa5]+")) { item.Appearance.FontData.SizeInPoints = 9.0F; } else { item.Appearance.FontData.SizeInPoints = 10.5F; } } } public static DataSourceList GetModelByDt(DataTable dt) where T : new() { var modelList = new DataSourceList(); //List columns = dt.Columns.Cast().Select(p => p.ColumnName.Replace("_", "").ToUpper()).ToList(); foreach (DataRow dr in dt.Rows) { T model = new T(); foreach (var propertyInfo in typeof(T).GetProperties().AsParallel()) { if (dt.Columns.Contains(propertyInfo.Name.ToUpper()) && (dr[propertyInfo.Name] != DBNull.Value)) //SetPropertyValue(propertyInfo, model, dr[propertyInfo.Name]); propertyInfo.SetValue(model, ConvertDataType(propertyInfo.PropertyType, dr[propertyInfo.Name]), null); } modelList.Add(model); } return modelList; } private static object ConvertDataType(Type type, object objValue) { if (type == typeof(bool) || type == typeof(bool?)) { return bool.Parse(objValue == null ? "False" : objValue.ToString()); } else if (type == typeof(int?)) { if (objValue == null) { return null; } else { return int.Parse(objValue.ToString()); } } else if (type == typeof(long?)) { if (objValue == null) { return null; } else { return long.Parse(objValue.ToString()); } } else if (type == typeof(short?)) { if (objValue == null) { return null; } else { return short.Parse(objValue.ToString()); } } else if (type == typeof(float?)) { if (objValue == null) { return null; } else { return float.Parse(objValue.ToString()); } } else if (type == typeof(double?)) { if (objValue == null) { return null; } else { return double.Parse(objValue.ToString()); } } else if (type == typeof(decimal?)) { if (objValue == null) { return null; } else { return decimal.Parse(objValue.ToString()); } } else if (type == typeof(DateTime?)) { if (objValue == null) { return null; } else { return DateTime.Parse(objValue.ToString()); } } else { return objValue == null ? "" : objValue.ToString(); } } private static void SetPropertyValue(PropertyInfo propertyInfo, T model, object data) { try { if (data == null) return; propertyInfo.SetValue(model, propertyInfo.PropertyType == data.GetType() ? data : Convert.ChangeType(data, propertyInfo.PropertyType), null); } catch (Exception) { // ignored } } public static DataSourceList TableToEntity(DataTable dt) where T : class,new() { Type type = typeof(T); DataSourceList list = new DataSourceList(); foreach (DataRow row in dt.Rows) { PropertyInfo[] pArray = type.GetProperties(); T entity = new T(); foreach (PropertyInfo p in pArray) { if (row[p.Name] is Int64) { p.SetValue(entity, Convert.ToInt32(row[p.Name]), null); continue; } p.SetValue(entity, row[p.Name], null); } list.Add(entity); } return list; } /// 执行DataTable中的查询返回新的DataTable /// /// 源数据DataTable /// 查询条件 /// public static DataTable GetNewDataTable(DataTable dt, string condition, string sortstr) { DataTable newdt = new DataTable(); newdt = dt.Clone(); DataRow[] dr = dt.Select(condition, sortstr); for (int i = 0; i < dr.Length; i++) { newdt.ImportRow((DataRow)dr[i]); } return newdt;//返回的查询结果 } /// datatable去重 /// /// 需要去重的datatable /// 依据哪些列去重 /// public static DataTable GetDistinctTable(DataTable dtSource, params string[] columnNames) { DataTable distinctTable = dtSource.Clone(); try { if (dtSource != null && dtSource.Rows.Count > 0) { DataView dv = new DataView(dtSource); distinctTable = dv.ToTable(true, columnNames); } } catch (Exception ee) { MessageBox.Show(ee.ToString()); } return distinctTable; } /// /// 主从表禁止排序 /// /// public static void ForbidSort(UltraGrid ugr) { foreach (UltraGridColumn ugc in ugr.DisplayLayout.Bands[0].Columns) { ugc.SortIndicator = SortIndicator.Disabled; } foreach (UltraGridColumn ug1 in ugr.DisplayLayout.Bands[1].Columns) { ug1.SortIndicator = SortIndicator.Disabled; } } } }