using Core.Mes.Client.Comm.Server; using CoreFS.CA06; using Infragistics.Win; using Infragistics.Win.UltraWinEditors; using Infragistics.Win.UltraWinGrid; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml.Linq; namespace Core.Mes.Client.Comm { public static class ComHelper { /// /// 不能为空 /// public static string ERROR_EMPTY = "不能为空"; /// /// 未选择 /// public static string ERROR_CHOOSE = "未选择"; /// /// 日期错误 /// public static string ERROR_DATE = "日期错误"; /// /// 应该输入整数 /// public static string ERROR_INT = "应该输入整数"; /// /// 应该输入非整数或小数 /// public static string ERROR_DOUBLE = "应该输入整数或小数"; /// /// 读取xml文件返回连接地址 /// /// Config节点的name属性值 /// public static string GetServiceUrl(string name) { string url = ""; var xml = XDocument.Load(Application.StartupPath + "/data/comm.core"); var items = xml.Element("CommunicationConfig").Elements("Config"); for (int i = 0; i < items.Count(); i++) { try { if (items.ElementAt(i).Attribute("name").Value == name) { url = items.ElementAt(i).Element("url").Value.Replace("remoting/HessianRemoting", "service/"); break; } } catch { } } return url; } /// /// 禁用 grid 列头排序 /// /// public static void GridDisableSortIndicator(UltraGrid grid) { foreach (var band in grid.DisplayLayout.Bands) { foreach (var col in band.Columns) { col.SortIndicator = SortIndicator.Disabled; } } } /// /// 获取List数据 /// /// 接口反问地址 /// 实体类 /// 服务端接口全名称 /// 方法名 /// 参数 /// public static List GetListEntity(string url, string className, string methodName, object[] param) where TEntity : class, new() { CoreJsonService service = new CoreJsonService(url); List list = service.execute>(className, methodName, param); return list; } /// /// 获取List数据 /// /// 接口反问地址 /// 实体类 /// 服务端接口全名称 /// 方法名 /// 参数 /// public static TEntity GetEntity(string url, string className, string methodName, object[] param) { CoreJsonService service = new CoreJsonService(url); TEntity entity = service.execute(className, methodName, param); return entity; } /// /// 无返回数据 /// /// 接口访问地址 /// 服务端接口全名称 /// 方法名 /// 参数 /// public static void RequestServer(string url, string className, string methodName, object[] param) { CoreJsonService service = new CoreJsonService(url); service.execute(className, methodName, param); } /// /// 获取Text值 /// /// /// public static string GetText(this TextBox textBox) { return string.IsNullOrWhiteSpace(textBox.Text) ? null : textBox.Text.Trim(); } /// /// 判定是否为空 /// /// /// public static bool IsEmpty(this UltraTextEditor textBox) { return string.IsNullOrWhiteSpace(textBox.Text); } /// /// 获取value /// /// /// public static DateTime? GetValue(this UltraDateTimeEditor editor) { if (editor.Value == null) return null; else return Convert.ToDateTime(editor.Value); } /// /// 获取 DateTime 值 /// /// /// /// public static DateTime GetDate(this UltraDateTimeEditor editor) { return Convert.ToDateTime(editor.Value); } /// /// 获取短日期 /// /// /// public static DateTime GetDate(this DateTime date) { DateTime dateTime = Convert.ToDateTime(date.ToShortDateString()); return dateTime; } /// /// string 转为int? /// /// /// public static int? ParseInt(this string text) { if (string.IsNullOrWhiteSpace(text)) return null; return Convert.ToInt32(text); } /// /// int? 转 string /// /// /// public static string ParseStr(this int? value) { if (value == null) return null; return value.ToString(); } public static double? ParseDouble(this object value) { if (value == null || value is DBNull) { return null; } try { return Convert.ToDouble(value); } catch { return null; } } public static int? ParseInt(this object value) { if (value == null) { return null; } return Convert.ToInt32(value); } /// /// double? 转 string /// /// /// public static string ParseStr(this double? value) { if (value == null) return null; return value.ToString(); } /// /// string 转 double? /// /// /// public static double? ParseDouble(this string value) { if (value == null) return null; return Convert.ToDouble(value); } /// /// string 转 float /// /// /// public static float ParseFloat(this string value) { return Convert.ToSingle(value); } /// /// string 转 double /// /// /// public static double ConvertDouble(this string value) { if (value == null) return 0; return Convert.ToDouble(value); } /// /// DateTime? 转为 DateTime /// /// /// public static DateTime ParseDate(this DateTime? value) { if (value == null) return DateTime.Now; return Convert.ToDateTime(value); } /// /// 尝试转换为日期 /// /// /// public static bool TryDate(this string value) { if (string.IsNullOrWhiteSpace(value)) return false; try { Convert.ToDateTime(value); return true; } catch { return false; } } /// /// 尝试转换为小数形式 /// /// /// public static bool TryDouble(this string value) { if (string.IsNullOrWhiteSpace(value)) return false; try { Convert.ToDouble(value); return true; } catch { return false; } } /// /// 尝试转换为小数形式 /// /// /// public static bool TryDouble(this object value) { if (value == null) return false; try { Convert.ToDouble(value); return true; } catch { return false; } } /// /// 尝试转换为整数 /// /// /// public static bool TryInt(this string value) { if (string.IsNullOrWhiteSpace(value)) return false; try { Convert.ToInt32(value); return true; } catch { return false; } } /// /// 给数字补小数位 /// /// /// /// public static string AddTail(string value, int digits) { if (string.IsNullOrWhiteSpace(value)) { return value; } value = value.Trim(' '); string[] items = value.Split('.'); string format = "."; if (items.Length > 2) { return value; } if (items.Length < 2) { //刚好为整数 for (int i = 0; i < digits; i++) { format += "0"; } return items[0] + format; } if (items[1].Length == digits) { //刚好够位数 return value; } int count = items[1].Length - digits; if (count < 0) { //位数不够 format += items[1]; for (int i = 0; i < Math.Abs(count); i++) { format += "0"; } } else if (count > 0) { //位数大于需要的位数 format += items[1].Substring(0, digits); } return items[0] + format; } /// /// 获取Text值 /// /// /// public static string GetText(this object obj) { return obj == null ? null : obj.ToString().Trim(); } /// /// 获取Text值 /// /// /// public static string GetText(this UltraTextEditor textBox) { return string.IsNullOrWhiteSpace(textBox.Text) ? null : textBox.Text.Trim(); } /// /// 获取value值 /// /// /// public static string GetSelectValue(this UltraComboEditor comb) { return comb.SelectedIndex < 0 ? null : comb.Value.ToString(); } /// /// 设置选中项 /// /// /// /// public static void SetSelectValue(this UltraComboEditor comb, object value) { if (value == null) { comb.SelectedIndex = -1; return; } int index = 0; foreach (var item in comb.Items) { if (item.DataValue.ToString() == value.ToString()) { comb.SelectedIndex = index; break; } index++; } } /// ///为空的时候返回null 不为空返回 toString /// /// /// public static string GetString(this object value) { if (value == null || value is DBNull || string.IsNullOrWhiteSpace(value.ToString())) { return null; } return value.ToString(); } #region 获取 相关 ValueList 数据 /// ///班次 /// /// public static ValueList List_GetWorkGroup() { ValueListItem[] items = new ValueListItem[] { new ValueListItem("1", "夜班"), new ValueListItem("2", "白班"), new ValueListItem("3", "中班") }; ValueList valueList = new ValueList(); valueList.ValueListItems.AddRange(items); return valueList; } /// /// DataTable 转换为valueList数据 /// /// 数据表 /// 隐藏值 /// 显示值 /// OB对象 public static ValueList GetValueList(DataTable dt, string value, string text) { ValueListItem[] items = new ValueListItem[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { items[i] = new ValueListItem(dt.Rows[i][value].ToString(), dt.Rows[i][text].ToString()); } ValueList list = new ValueList(); list.ValueListItems.AddRange(items); return list; } /// /// 获取valueList数据 /// /// 方法名 /// OB对象 public static DataTable GetDataTable(string methodID, OpeBase ob) { DataTable dt = ServerHelper.GetData(methodID, new Object[] { }, ob); return dt; } /// /// 获取valueList数据 /// /// 方法名 /// 显示值 /// 隐藏值 /// OB对象 public static ValueList GetValueList(string methodID, string text, string value, OpeBase ob) { DataTable dt = ServerHelper.GetData(methodID, new Object[] { }, ob); ValueListItem[] items = new ValueListItem[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { items[i] = new ValueListItem(dt.Rows[i][value].ToString(), dt.Rows[i][text].ToString()); } ValueList list = new ValueList(); list.ValueListItems.AddRange(items); return list; } /// /// 检验补充项目类型 /// /// public static DataTable List_MaterialOther() { DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[] { new DataColumn("NAME"), new DataColumn("CODE") }); dt.Rows.Add(new object[] { "试验方向", "A" }); dt.Rows.Add(new object[] { "试验温度", "B" }); dt.Rows.Add(new object[] { "试样尺寸", "C" }); dt.Rows.Add(new object[] { "试验位置", "D" }); return dt; } #endregion 获取 相关 ValueList 数据 /// /// 获取grid 所有勾选的行 /// /// /// 复选框所在列名 /// public static List UltraGridGetChooseRows(UltraGrid grid, string columnName = "Choose") { grid.UpdateData(); List list = new List(); RowsCollection rows = grid.Rows; foreach (var item in rows) { try { if (Convert.ToBoolean(item.Cells[columnName].Value) == true && item.Hidden == false && item.IsFilteredOut == false) { list.Add(item); } } catch { } } return list; } /// /// 获取grid 所有勾选的行 /// /// /// 复选框所在列名 /// public static List UltraGridGetCHCRows(UltraGrid grid, string columnName = "CHC") { grid.UpdateData(); List list = new List(); RowsCollection rows = grid.Rows; foreach (var item in rows) { try { if (Convert.ToBoolean(item.Cells[columnName].Value) == true && item.Hidden == false && item.IsFilteredOut == false) { list.Add(item); } } catch { } } return list; } /// /// 获取grid 所有勾选的行 /// /// /// 复选框所在列名 /// public static List UltraGridGetOtherRows(UltraGrid grid, string columnName) { grid.UpdateData(); List list = new List(); RowsCollection rows = grid.Rows; foreach (var item in rows) { try { if (Convert.ToBoolean(item.Cells[columnName].Value) == true) { list.Add(item); } } catch { } } return list; } /// /// 获取grid 所有勾选的行 /// /// /// 复选框所在列名 /// public static List UltraGridGetOtherRowsNoHidden(UltraGrid grid, string columnName) { grid.UpdateData(); List list = new List(); RowsCollection rows = grid.Rows; foreach (var item in rows) { try { if (Convert.ToBoolean(item.Cells[columnName].Value) == true && item.Hidden == false && item.IsFilteredOut == false) { list.Add(item); } } catch { } } return list; } /// /// 设置列隐藏(全部) /// /// public static void UltraGridColunmsHidden(UltraGrid grid) { ColumnsCollection band = grid.DisplayLayout.Bands[0].Columns; foreach (var bandColunm in band) { bandColunm.Hidden = true; } } /// /// 清空grid 行 /// /// public static void UltraGridRowsClear(UltraGrid grid) { int count = grid.Rows.Count - 1; while (count != -1) { grid.Rows[count].Delete(); count--; } } /// /// 设置Grid 全部列 CheckBox 状态 /// /// /// checkBox 列名 /// 是否选中 public static void UltraGridSetChecked(UltraGrid grid, string colName, bool isChecked) { int count = grid.Rows.Count - 1; while (count != -1) { grid.Rows[count].Cells[colName].Value = isChecked; count--; } } /// /// 设置Grid 单选 适用于单表 /// /// /// checkBox 列名 public static void UltraGridSingleChecked(UltraGrid grid, string colName = "Choose") { int count = grid.Rows.Count - 1; while (count != -1) { try { if (!grid.ActiveRow.Equals(grid.Rows[count])) { grid.Rows[count].Cells[colName].Value = false; } else { grid.Rows[count].Cells[colName].Value = true; } } catch { } count--; } } /// /// 设置Grid 单选 /// /// /// 选中的行 /// checkBox 列名 public static void UltraGridSingleChecked(UltraGrid grid, UltraGridRow row, string colName = "Choose") { int count = grid.Rows.Count - 1; while (count != -1) { try { if (!row.Equals(grid.Rows[count])) { grid.Rows[count].Cells[colName].Value = false; } else { grid.Rows[count].Cells[colName].Value = true; } } catch { } count--; } } /// /// 设置单元格内容水平对齐方式 /// /// /// public static void UltraGirdCellTextHAgin(UltraGridBand band, HAlign align) { ColumnsCollection columns = band.Columns; foreach (var item in columns) { item.CellAppearance.TextHAlign = align; } } /// ///设置水平对齐方式 /// /// /// public static void UltraGridColunmHAgin(UltraGridColumn[] col, HAlign align) { foreach (var item in col) { item.CellAppearance.TextHAlign = align; } } /// /// 设置焦点行 背景色、字体颜色 /// /// /// /// public static void UltraGridSetActiveRowColor(List list, Color? backColor, Color? fontColor) { foreach (UltraGrid grid in list) { if (backColor == null) grid.DisplayLayout.Override.ActiveRowCellAppearance.BackColor = Color.DeepSkyBlue; else grid.DisplayLayout.Override.ActiveRowCellAppearance.BackColor = backColor.Value; if (fontColor == null) grid.DisplayLayout.Override.ActiveRowCellAppearance.ForeColor = Color.White; else grid.DisplayLayout.Override.ActiveRowCellAppearance.ForeColor = fontColor.Value; } } public static bool getUserRight(String userId, OpeBase ob, String deptId, params string[] remark) { DataTable userRemaek = ServerHelper.GetData( "com.steering.pss.sale.order.CoreUpdateInfo.GetUserRight", new Object[] { userId }, ob); for (int i = 0; i < remark.Length; i++) { if (userRemaek.Rows[0]["remark"].ToString().Contains(remark[i])) return true; } if (deptId == "001") return true; else return false; } /// /// 反射调用模拟平台打开界面方法 /// /// 平台窗体对象 /// "命名空间+窗体类名 如:[iCore.Omp.Ai.C_Mes.frmAnneal]" /// "界面名称 如:[1#退火炉作业]" /// 界面菜单路径 如:[\\板带Mes\\板带二车间\\1#退火炉作业] 可不传,但是如果打开了错误的界面,可用此参数 public static void OpenFromWithToolInfo(Form ParentForm, string formkey, string formName, string formPath = null) { Infragistics.Win.UltraWinToolbars.UltraToolbarsManager toolManager = ParentForm.GetType().GetField("uMainMenu", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ParentForm) as Infragistics.Win.UltraWinToolbars.UltraToolbarsManager; if (toolManager == null) return; MethodInfo mi = ParentForm.GetType().GetMethod("MainMenu_ToolClick", BindingFlags.NonPublic | BindingFlags.Instance); if (mi == null) return; Infragistics.Win.UltraWinToolbars.ToolBase bar = null; foreach (var item in toolManager.Tools) { CoreMenuTag mTag = item.Tag as CoreMenuTag; if (mTag != null) { if (mTag.Key == formkey && mTag.WinCaption == formName && (string.IsNullOrEmpty(formPath) || !string.IsNullOrEmpty(formPath) && mTag.WinPath == formPath)) { bar = item; } } } if (bar == null) return; mi.Invoke(ParentForm, new object[] { toolManager, new Infragistics.Win.UltraWinToolbars.ToolClickEventArgs(bar, null) }); } /// /// 设置过滤框是否显示 /// /// /// public static void setAllowRowFolter(UltraGrid grid, bool flag) { if (flag) { grid.DisplayLayout.Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.True; } else { int bNum = grid.DisplayLayout.Bands.Count; if (bNum > 0) { for (int j = 0; j < bNum; j++) { grid.DisplayLayout.Bands[j].ColumnFilters.ClearAllFilters(); } } grid.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.False; } } public static void ToolBarItemAdd(Form ParentForm, List Toolbar, List newButtonList, int[] index) { bool isRun = false; if (Toolbar == null) return; for (int i = 0; i < newButtonList.Count; i++) { if (Toolbar.FindIndex(t => t.Key.ToLower() == newButtonList[i].Key.ToLower()) < 0) { int insertIndex = index[i] >= 0 ? index[i] : Toolbar.Count; Toolbar.Insert(insertIndex, newButtonList[i]); isRun = true; } else continue; } if (isRun) { //Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea FrmBase frmBase = ParentForm.GetType().GetField("thisform", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ParentForm) as FrmBase; if (frmBase != null) { foreach (System.Windows.Forms.Control item in frmBase.Controls) { if (item.Name == "_FrmBase_Toolbars_Dock_Area_Top") { item.Tag = "Remove"; } } MethodInfo mi = ParentForm.GetType().GetMethod("GenerateUltraToolBar", BindingFlags.Public | BindingFlags.Instance); if (mi == null) return; mi.Invoke(ParentForm, new object[] { frmBase, Toolbar }); //frmBase.Controls["_FrmBase_Toolbars_Dock_Area_Top"].Hide(); foreach (System.Windows.Forms.Control item in frmBase.Controls) { if (item.Tag != null && item.Tag.ToString() == "Remove") { frmBase.Controls.Remove(item); } } } } } #region UltraComboEditor 下拉框绑定数据 /// /// 用于通过服务端方法获取绑定下拉框的数据源 /// /// 实体类名 /// 所属界面 defaultValue(this) /// 调用服务端方法的路径 /// 调用服务端方法的方法名称 /// 调用服务端方法的参数 /// 下拉框value绑定对象的属性名 /// 下拉框text绑定对象的属性名 /// 是否绑定一个空值 /// public static DataTable getDTForAll(FrmBase bs, String service, String method, object[] obj, String valueMeber, String displayMeber, Boolean bandEmpty = true) { List info = bs.GetJsonService().execute>(service, method, obj); DataTable dt = new DataTable(); dt.Columns.Add("BASECODE"); dt.Columns.Add("BASENAME"); if (bandEmpty) //如果为TRUE,绑定空值 dt.Rows.Add(null, ""); foreach (T t in info) dt.Rows.Add(t.GetType().GetProperty(valueMeber).GetValue(t, null), t.GetType().GetProperty(displayMeber).GetValue(t, null)); return dt; } /// /// 第三方控件UltraComboEditor绑定数据源,实现自动补全 /// /// /// public static void valueToUltraComboEditor(DataTable source, UltraComboEditor cbb) { cbb.DataSource = source; cbb.DisplayMember = "BASENAME"; cbb.ValueMember = "BASECODE"; cbb.SelectedIndex = -1; //cbb.AutoCompleteMode = Infragistics.Win.AutoCompleteMode.SuggestAppend; SetComboItemHeight(cbb); } /// /// 设置UltraComboEditor中的中文和非中文统一高度。 /// /// public static void SetComboItemHeight(UltraComboEditor cmb) { cmb.Update(); foreach (ValueListItem item in cmb.Items) { if (Regex.IsMatch(item.DisplayText.ToString(), @"[\u4e00-\u9fa5]+")) { item.Appearance.FontData.SizeInPoints = 9.0F; } else { item.Appearance.FontData.SizeInPoints = 10.5F; } } } #endregion #region 打开其他模块界面 public static void MethodInvoke(FrmBase frmBase, string methodName, object[] obj = null) { try { MethodInfo mi = frmBase.GetType().GetMethod(methodName); if (mi != null) { mi.Invoke(frmBase, obj); } } catch { } } /// /// 反射调用模拟平台打开界面方法 /// /// 平台窗体对象 /// "命名空间+窗体类名 如:[iCore.Omp.Ai.C_Mes.frmAnneal]" /// "界面名称 如:[1#退火炉作业]" /// 界面菜单路径 如:[\\板带Mes\\板带二车间\\1#退火炉作业] 可不传,但是如果打开了错误的界面,可用此参数 public static FrmBase OpenFromWithToolInfo(Form ParentForm, string formkey, string formName, string formPath = null, string customInfo = "") { Infragistics.Win.UltraWinToolbars.UltraToolbarsManager toolManager = ParentForm.GetType().GetField("uMainMenu", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ParentForm) as Infragistics.Win.UltraWinToolbars.UltraToolbarsManager; if (toolManager == null) return null; MethodInfo mi = ParentForm.GetType().GetMethod("MainMenu_ToolClick", BindingFlags.NonPublic | BindingFlags.Instance); if (mi == null) return null; Infragistics.Win.UltraWinToolbars.ToolBase bar = null; foreach (var item in toolManager.Tools) { CoreMenuTag mTag = item.Tag as CoreMenuTag; if (mTag != null) { if (mTag.Key == formkey && mTag.WinCaption == formName && (string.IsNullOrEmpty(formPath) || !string.IsNullOrEmpty(formPath) && mTag.WinPath == formPath)) { mTag.CustomInfo = customInfo; bar = item; } } } if (bar == null) return null; mi.Invoke(ParentForm, new object[] { toolManager, new Infragistics.Win.UltraWinToolbars.ToolClickEventArgs(bar, null) }); return ParentForm.ActiveMdiChild as FrmBase; } #endregion /// /// 增加按钮 /// /// /// /// /// /// public static void ToolBarItemAdd(FrmBase frmBaseThis, Form ParentForm, List Toolbar, List newButtonList, int[] index) { bool isRun = false; if (Toolbar == null) return; for (int i = 0; i < newButtonList.Count; i++) { if (Toolbar.FindIndex(t => t.Key.ToLower() == newButtonList[i].Key.ToLower()) < 0) { int insertIndex = index[i] >= 0 ? index[i] : Toolbar.Count; Toolbar.Insert(insertIndex, newButtonList[i]); isRun = true; } else continue; } if (isRun) { //Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea FrmBase frmBase = ParentForm.GetType().GetField("thisform", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ParentForm) as FrmBase; if (frmBase != null && frmBase.winPath == frmBaseThis.winPath) { foreach (System.Windows.Forms.Control item in frmBase.Controls) { if (item.Name == "_FrmBase_Toolbars_Dock_Area_Top") { item.Tag = "Remove"; } } MethodInfo mi = ParentForm.GetType().GetMethod("GenerateUltraToolBar", BindingFlags.Public | BindingFlags.Instance); if (mi == null) return; mi.Invoke(ParentForm, new object[] { frmBase, Toolbar }); //frmBase.Controls["_FrmBase_Toolbars_Dock_Area_Top"].Hide(); foreach (System.Windows.Forms.Control item in frmBase.Controls) { if (item.Tag != null && item.Tag.ToString() == "Remove") { frmBase.Controls.Remove(item); } } } } } /// /// 获取 BaseInfo ValueList /// /// BaseInfo集 /// public static ValueList List_GetBaseInfo(DataTable dt) { ValueListItem[] items = new ValueListItem[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { ValueListItem item = new ValueListItem(); item.DataValue = dt.Rows[i]["BASECODE"].ToString(); item.DisplayText = dt.Rows[i]["BASENAME"].ToString(); items[i] = item; } ValueList valueList = new ValueList(); valueList.ValueListItems.AddRange(items); return valueList; } } }