using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Collections; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using Microsoft.Office.Interop.Excel; //APP using System.Xml; using System.Data.SqlClient; using System.Diagnostics; using System.Reflection; //MISSIN using Infragistics.Win.UltraWinGrid; using Infragistics.Win; using Infragistics.Win.UltraWinGrid.ExcelExport; using Infragistics.Excel; using Infragistics.Win.UltraWinDataSource; using Infragistics.Win.UltraWinEditors; using Core.Mes.Client.Comm.Server; using Core.Mes.Client.Comm.Tool; namespace Core.StlMes.Client.PlnSaleOrd { public class PlanComm { public static double PI = 3.1415926; /// /// 管米单重计算(t/m) /// /// 外径(mm) /// 壁厚(mm) /// public static double WeightOfMi(double outdiameter, double aimwallthick) { double weightOfmi = 0.02466 * aimwallthick * (outdiameter - aimwallthick) / 1000; return weightOfmi; } /// /// 管坯米单重(t/m) /// /// 管坯断面(mm) /// public static double GpweightOfmi(double outdiameter) { return (7.8 * PI / 4 * outdiameter * outdiameter) / 1000 / 1000; } /// /// 单位英尺长度转米 /// /// 英尺长度 /// 米长度 public static double FootoMi(double lenth) { double converate = 0.3048; //换算率 return Math.Round((lenth * converate), 3); } /// /// 单位英磅转吨 /// /// /// public static double PoundtoTon(double weight) { double converate = 0.45392 / 1000; //换算率 return Math.Round((weight * converate), 3); } /// /// 导出 /// /// /// public static void Export(ref UltraGrid myGrid1, string strFileName) { try { if (myGrid1.Rows.Count == 0) return; if (strFileName.Length == 0) strFileName = "未命名"; SaveFileDialog dlg = new SaveFileDialog(); dlg.Title = "保存"; dlg.OverwritePrompt = true; dlg.Filter = "Excel文件(*.xls)|*.xls"; dlg.AddExtension = true; dlg.FileName = strFileName; if (dlg.ShowDialog() == DialogResult.OK) { strFileName = dlg.FileName; using (UltraGridExcelExporter ultraGridExcelExporter1 = new UltraGridExcelExporter()) { ultraGridExcelExporter1.Export(myGrid1, strFileName); } if (MessageBox.Show("数据导出成功!\n需要打开所导出文件吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { ProcessStartInfo p = new ProcessStartInfo(strFileName); p.WorkingDirectory = Path.GetDirectoryName(strFileName); Process.Start(p); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } /// /// 导出 /// /// /// /// public static void Export(ref UltraGrid myGrid1, string strFileName, UltraGridExcelExporter GridExcelExporter) { try { if (myGrid1.Rows.Count == 0) return; if (strFileName.Length == 0) strFileName = "未命名"; SaveFileDialog dlg = new SaveFileDialog(); dlg.Title = "保存"; dlg.OverwritePrompt = true; dlg.Filter = "Excel文件(*.xls)|*.xls"; dlg.AddExtension = true; dlg.FileName = strFileName; if (dlg.ShowDialog() == DialogResult.OK) { strFileName = dlg.FileName; using (UltraGridExcelExporter ultraGridExcelExporter1 = new UltraGridExcelExporter()) { GridExcelExporter.Export(myGrid1, strFileName); } if (MessageBox.Show("数据导出成功!\n需要打开所导出文件吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { ProcessStartInfo p = new ProcessStartInfo(strFileName); p.WorkingDirectory = Path.GetDirectoryName(strFileName); Process.Start(p); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } /// /// 设置grid单元格可编辑 /// /// grid表格 /// 可编辑的列头名称数组 public static void setGridActivation(UltraGridBand band, params string[] strs) { foreach (UltraGridColumn column in band.Columns) { if (!strs.Contains(column.Key)) { column.CellActivation = Activation.ActivateOnly; } else { column.CellActivation = Activation.AllowEdit; column.CellAppearance.BackColor = Color.FromArgb(255, 255, 128); } } } /// /// 表格下拉框,可以有ValueList来提供,可以选择的样式 /// /// /// /// /// public static ValueList GeneralValuelist(ref System.Data.DataTable table, string strKey, string strText) { if (table == null || !table.Columns.Contains(strKey) || !table.Columns.Contains(strText)) { return null; } ArrayList alist = new ArrayList(); ValueList vlist = new ValueList(); for (int i = 0; i < table.Rows.Count; i++) { try { if (!alist.Contains(table.Rows[i][strKey])) { alist.Add(table.Rows[i][strKey]); vlist.ValueListItems.Add(table.Rows[i][strKey], Convert.ToString(table.Rows[i][strText])); } } catch { } } return vlist; } /// /// 自定义对象深拷贝 /// /// 类名 /// 源对象 /// public static T Clone(T RealObject) { using (Stream objectStream = new MemoryStream()) { //利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制 IFormatter formatter = new BinaryFormatter(); formatter.Serialize(objectStream, RealObject); objectStream.Seek(0, SeekOrigin.Begin); return (T)formatter.Deserialize(objectStream); } } /// /// 键盘按下Ctrl+D,拷贝活动单元格的数据到所有已勾选的此列的单元格中 /// /// UltraGrid /// /// 可以进行列名称 public static void setGridCopyActColumn(UltraGrid ugrid, KeyEventArgs e, params string[] strs) { if (e.Control && e.KeyCode == Keys.D) { if (ugrid != null && ugrid.ActiveRow != null) { UltraGridRow ugr = ugrid.ActiveRow; foreach (string colName in strs) { if (ugrid.ActiveCell.Column.Key.Equals(colName)) { if (ugr.Cells[colName].Activation != Activation.AllowEdit) { return; } ugrid.UpdateData(); ArrayList list = new ArrayList(); IQueryable checkRows = ugrid.Rows.AsQueryable().Where(" CHECK = 'True' "); if (checkRows.Count() == 0) { return; } foreach (UltraGridRow uRow in checkRows) { if (uRow != ugr && uRow.Cells[colName].Activation == Activation.AllowEdit) { uRow.Cells[colName].Value = ugr.Cells[colName].Value; } } } } } } } /// /// 键盘按下Ctrl+D,拷贝活动单元格的数据到所有已勾选的此列的单元格中 /// /// UltraGrid /// 选择列名(例如"CHC") /// /// 可以进行列名称 public static void setGridCopyActColumn(UltraGrid ugrid, string key, KeyEventArgs e, params string[] strs) { if (e.Control && e.KeyCode == Keys.D) { if (ugrid != null && ugrid.ActiveRow != null) { UltraGridRow ugr = ugrid.ActiveRow; foreach (string colName in strs) { if (ugrid.ActiveCell.Column.Key.Equals(colName)) { if (ugr.Cells[colName].Activation != Activation.AllowEdit) { return; } ugrid.UpdateData(); ArrayList list = new ArrayList(); IQueryable checkRows = ugrid.Rows.AsQueryable().Where(key + " = 'True'"); if (checkRows.Count() == 0) { return; } foreach (UltraGridRow uRow in checkRows) { if (uRow != ugr && uRow.Cells[colName].Activation == Activation.AllowEdit) { uRow.Cells[colName].Value = ugr.Cells[colName].Value; } } } } } } } /// /// 返回table的column列中是否存在str /// /// datable /// 列头名 /// 匹配字符串 /// public static bool isInDataTable(System.Data.DataTable dt, string column, string str) { bool isInTable = false; if (dt == null || column.Equals("")) { return isInTable; } if (!dt.Columns.Contains(column)) { return isInTable; } foreach(DataRow dr in dt.Rows) { if (dr[column].ToString().Equals(str)) { isInTable = true; } } return isInTable; } /// /// 复制DataTable到UltraDataBand /// /// 源数据 /// UltraDataBand /// 是否清除原数据 public static void CopyDataToDataSource(System.Data.DataTable src, UltraDataBand dest, bool ClearExists) { if (src == null || dest == null) { return; } if (ClearExists) { dest.DataSource.Rows.Clear(); } for (int i = 0; i < src.Rows.Count; i++) { DataRow CurRow = src.Rows[i]; object[] cellValues = new object[dest.Columns.Count]; for (int j = 0; j < dest.Columns.Count; j++) { if (src.Columns.Contains(dest.Columns[j].Key)) { cellValues[j] = CurRow[j]; } else { cellValues[j] = null; } } dest.DataSource.Rows.Add(cellValues); } } /// /// 设置Grid列是数字类型,显示样式 /// /// UltraGridBand /// 数字最大位数(如:99999.99,最大位数5位) /// 保留小数位数(如:99999.99,保留2位小数) /// 数字单元列 public static void setGridDigitalCol(UltraGridBand band, int maxDigit, int digit, params string[] strs) { if (band == null) { return; } string maskInput = "-"; if (maxDigit > 0) { string str = ""; for (int i = 0; i < maxDigit; i++) { if (i != 0 && (i % 3) == 0) { str = "," + str; } str = "n" + str; } maskInput = maskInput + str; if (digit > 0) { maskInput += "."; for (int i = 0; i < digit; i++) { maskInput += "n"; } } foreach (UltraGridColumn column in band.Columns) { if (strs.Contains(column.Key)) { column.MaskDisplayMode = Infragistics.Win.UltraWinMaskedEdit.MaskMode.IncludeLiterals; column.MaskInput = maskInput; column.CellAppearance.TextHAlign = HAlign.Right; if (digit > 0) { column.Style = Infragistics.Win.UltraWinGrid.ColumnStyle.Double; } else { column.Style = Infragistics.Win.UltraWinGrid.ColumnStyle.Integer; } } } } } /// /// Grid列添加求和统计,设置数字显示样式 /// /// UltraGridBand /// 保留小数位数(如:99999.99,保留2位小数) /// 添加统计的列头名 public static void setGridSummarySet(UltraGrid grid, int digit, params string[] strs) { grid.DisplayLayout.Override.AllowRowSummaries = Infragistics.Win.UltraWinGrid.AllowRowSummaries.Default; grid.DisplayLayout.Override.AllowRowSummaries = Infragistics.Win.UltraWinGrid.AllowRowSummaries.BasedOnDataType; for (int i = 0; i < strs.Count(); i++) { string columnKey = strs[i]; UltraGridBand band = grid.DisplayLayout.Bands[0]; if (band == null) { return; } if (!band.Columns.Exists(columnKey)) { continue; } if (band.Summaries.Exists(columnKey)) { continue; } SummarySettings sumColumn = band.Summaries.Add(columnKey, SummaryType.Sum, band.Columns[columnKey], SummaryPosition.UseSummaryPositionColumn); sumColumn.DisplayFormat = "{0:N" + digit + "}"; sumColumn.Appearance.TextHAlign = HAlign.Right; } grid.DisplayLayout.Override.SummaryFooterCaptionVisible = Infragistics.Win.DefaultableBoolean.False; } /// /// 加载基础数据到下拉框中 /// /// 下拉框 /// 源DataTable /// 数据值 /// 数据显示 /// 是否包含空行 /// public static bool FillComBaseInfo(UltraComboEditor cmb, System.Data.DataTable dt, string strValue, string strName, bool hasBlankLine) { if (hasBlankLine && dt != null && dt.Rows.Count > 0) { DataRow dr = dt.NewRow(); dt.Rows.InsertAt(dr, 0); } cmb.DataSource = dt; cmb.DisplayMember = strName; cmb.ValueMember = strValue; ClsBaseInfo.SetComboItemHeight(cmb); return true; } /// /// 等待窗口 /// public static void WaitFromOpen(Cursor cursor) { cursor = Cursors.WaitCursor; //控制鼠标的样式为等待 if (Constant.WaitingForm == null) { Constant.WaitingForm = new WaitingForm(); } Constant.WaitingForm.ShowToUser = true; Constant.WaitingForm.Show(); Constant.WaitingForm.Update(); } /// /// 关闭等待 /// public static void WaitFromColse(Cursor cursor) { cursor = Cursors.Default; Constant.WaitingForm.ShowToUser = false; Constant.WaitingForm.Close(); Constant.WaitingForm = null; } /// //byWenCheng 设置grid的band的列名和描述(列名和描述来自数据库的列名和描述) /// /// 需要设置的grid的band /// 与band对应的表名 /// OpenBase对象 public static void SetColandCaption(Infragistics.Win.UltraWinGrid.UltraGridBand band, string tablename,CoreFS.CA06.OpeBase ob) { if (band == null) { return; } System.Data.DataTable dt = GetDataBySql(string.Format(@"select column_name,comments from user_col_comments where table_name = '{0}'", tablename),ob); if (dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { band.Columns.Add(row[0].ToString(), row[1].ToString()); } } } /// ///byWenCheng 执行sql语句 /// /// /// /// public static System.Data.DataTable GetDataBySql(string sqlString,CoreFS.CA06.OpeBase _ob) { return Core.Mes.Client.Comm.Server.ServerHelper.GetData("com.steering.pss.plnsaleord.ordAmCal.OrderDemo.getDataBySql", new Object[] { sqlString }, _ob); } /// ///byWenCheng 设置某band的所有列不可编辑,除了ignoreColums里包含的列 /// /// 需要设置的band /// 需要忽略的列 public static void SetGridColNoEdit(Infragistics.Win.UltraWinGrid.UltraGridBand band, string[] ignoreColums) { foreach (Infragistics.Win.UltraWinGrid.UltraGridColumn col in band.Columns) { if (ignoreColums.Length > 0 && !string.IsNullOrEmpty(ignoreColums.FirstOrDefault(c => c == col.Key))) { col.CellAppearance.BackColor = System.Drawing.Color.Yellow; continue; } col.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit; } } /// /// byWenCheng,复制数据到数据表,暂未测试速率,目前发现在查询数据时比较耗时,2000条数据2-3s /// /// /// /// public static void CopyDatabyDatatable(System.Data.DataTable srcDt,System.Data.DataTable desDt, bool ClearExsit) { if (srcDt.Rows.Count <= 0) { return; } if (ClearExsit) { desDt.Rows.Clear(); } foreach (DataRow row in srcDt.Rows) { desDt.LoadDataRow(row.ItemArray, false); } } /// ///byWenCheng 设置列宽根据内容自适应方法1 /// /// 需要设置的band public static void SetColumnAutoFitSize1(UltraGridBand band) { if (band != null) { band.PerformAutoResizeColumns(true, PerformAutoSizeType.VisibleRows); } } /// ///byWenCheng 设置列宽根据内容自适应方法2 /// /// 需要设置的band public static void SetColumnAutoFitSize2(UltraGridBand band) { if (band != null) { foreach (UltraGridColumn col in band.Columns) { col.PerformAutoResize(); } } } /// ///byWenCheng 设置行高根据内容自适应 /// /// public static void SetRowAutoFitSize(UltraGrid grid) { if(grid != null) { grid.DisplayLayout.Override.RowSizing = RowSizing.AutoFree; } } /// ///byWenCheng 获取grid的激活的行,如果该行有对应的父行,则取其父行。和selected选择的行有区别的是,selectedrow是可以有多行,activedrow只能是一行,而且一般是最后选择的那一行 /// /// /// public static UltraGridRow GetActiveRow(UltraGrid grid) { if (grid == null || grid.ActiveRow == null) { return null; } UltraGridRow ugr = grid.ActiveRow; if (ugr.HasParent()) { ugr = ugr.ParentRow; } return ugr; } /// /// byWencheng,获取小数点后指定位数的double值 /// /// 源double /// 指定小数点后的位数 /// 结果值 public static double GetSpecDecimalBit(double dsrc,int nBit) { return Convert.ToDouble(dsrc.ToString(string.Format("f{0}",nBit))); } } }