using DevExpress.Utils; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraEditors.Drawing; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Menu; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid.Views.Grid.ViewInfo; using DevExpress.XtraTab; using DevExpress.XtraTreeList; using Gs.DevApp.Entity; using Gs.DevApp.UserControl; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Net.Cache; using System.Reflection; using System.Resources; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; using UserControls.Data; using static System.Windows.Forms.Control; namespace Gs.DevApp.ToolBox { /// /// 通用类 /// public class UtilityHelper { private static readonly string WebApiUrl = ConfigurationManager.AppSettings["WebApiUrl"]; /// /// 读取加载信息 /// /// public static (Size, string, Color, Padding) getLoading() { Size _size = new Size(360, 90); return (_size, "拼命加载中,请稍后...", System.Drawing.Color.LightSkyBlue, new Padding(15)); } /// /// http请求 /// /// /// /// /// /// public static string HttpPost(string url, string meth, string param, bool isLoading = true) { Size _size; string _caption; Color _color; Padding _pad; (_size, _caption, _color, _pad) = getLoading(); DevExpress.Utils.WaitDialogForm wdf = new DevExpress.Utils.WaitDialogForm("加载进度:" + meth, _caption, _size); wdf.BackColor = _color; wdf.Padding = _pad; wdf.SetCaption("加载进度:" + meth); wdf.Visible = isLoading; HttpWebRequest request = null; StreamWriter requestStream = null; WebResponse response = null; string responseStr = null; try { if (string.IsNullOrEmpty(url)) url = WebApiUrl; url += meth; request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("token", GetBasicAuthTicket()); request.Accept = "*/*"; request.Timeout = 150000; request.AllowAutoRedirect = false; request.ServicePoint.Expect100Continue = false; HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); request.CachePolicy = noCachePolicy; requestStream = new StreamWriter(request.GetRequestStream()); requestStream.Write(param); requestStream.Close(); response = request.GetResponse(); if (response != null) { var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); responseStr = reader.ReadToEnd(); //File.WriteAllText(Server.MapPath("~/") + @"\test.txt", responseStr); reader.Close(); } } catch (Exception ex) { wdf.Close(); LogHelper.Debug(url, param + ":" + ex.Message); throw ex; } finally { request = null; requestStream = null; response = null; } wdf.Close(); return responseStr; } /// /// 根据图片名读取资源文件,不带后缀名 /// /// /// 1为大图 /// public static Image GetImgFromResource(string imageName, int lay) { var assembly = Assembly.GetExecutingAssembly(); var resourceManager = new ResourceManager("Gs.DevApp.Properties.Resources", assembly); try { var image = resourceManager.GetObject(imageName) as Image; if (image != null) return image; } catch (Exception ex) { } var image2 = resourceManager.GetObject(lay == 1 ? "chartsshowlegend_32x32" : "linktoprevious_16x16") as Image; return image2; } /// /// 初始化一个表 /// /// /// public static void SetDefaultTable(GridControl gc, GridView gv) { var dt = new DataTable(); foreach (GridColumn col in gv.Columns) { if (col.UnboundDataType == typeof(System.Boolean)) dt.Columns.Add(col.FieldName, typeof(System.Boolean)); else { dt.Columns.Add(col.FieldName, typeof(string)); } } gc.BindingContext = new BindingContext(); gc.DataSource = dt; gc.ForceInitialize(); gv.BestFitColumns(); } /// /// 生成访问服务的token /// /// public static string GetBasicAuthTicket() { var userGuid = string.IsNullOrEmpty(LoginInfoModel.CurrentUser.LoginUserGuid) ? Guid.NewGuid().ToString() : LoginInfoModel.CurrentUser.LoginUserGuid; var token = userGuid; return token; } /// /// 服务返回的json转为ReturnModel-->包含TablePage分页, /// /// /// public static ReturnModel ReturnToTablePage( string strReturn) { var rto = new ReturnModel(); var json = JObject.Parse(strReturn); rto.rtnCode = int.Parse(json["rtnCode"].ToString()); rto.rtnMsg = json["rtnMsg"].ToString(); rto.rtnData = new PageListModel(); rto.rtnData.pages = int.Parse(json["rtnData"]["pages"].ToString()); rto.rtnData.total = int.Parse(json["rtnData"]["total"].ToString()); rto.rtnData.everyPageSize = int.Parse(json["rtnData"]["everyPageSize"].ToString()); var array = new JArray(); var d = json["rtnData"]["list"]; foreach (var a in d) array.Add(a); var dt = JsonConvert.DeserializeObject(array.ToString()); rto.rtnData.list = dt; return rto; } /// /// 服务返回的json返回ReturnModel, /// /// /// public static ReturnModel ReturnToDynamic(string strReturn) { var rto = new ReturnModel(); var json = JObject.Parse(strReturn); rto.rtnCode = int.Parse(json["rtnCode"].ToString()); rto.rtnMsg = json["rtnMsg"].ToString(); rto.rtnData = json["rtnData"]; return rto; } /// /// 服务返回的json串返回ReturnModel-->仅仅有list,不分页, /// /// /// public static ReturnModel ReturnToList(string strReturn) { var rto = new ReturnModel(); var json = JObject.Parse(strReturn); rto.rtnCode = int.Parse(json["rtnCode"].ToString()); rto.rtnMsg = json["rtnMsg"].ToString(); rto.rtnData = new DataTable(); var array = new JArray(); var d = json["rtnData"]; foreach (var a in d) array.Add(a); //if (array.Count <=0) // return null; var dt = JsonConvert.DeserializeObject(array.ToString()); rto.rtnData = dt; return rto; } #region 批量处理对像,文本值,包含清空,禁用,启用三种 /// /// 根据对象批量设置文本框的值 /// /// controls:为groupBox1.Controls/panel1.Controls /// 对像 /// 是否可编辑 /// 关联的grid public static void SetValueByObj(ControlCollection controls, dynamic dynamicObject, bool isEdt, List gridViews = null) { isEdt = !isEdt; if (gridViews != null) { foreach (var gv in gridViews) { gv.ClearSorting(); gv.OptionsCustomization.AllowSort = isEdt; foreach (GridColumn colmn in gv.Columns) { colmn.OptionsColumn.AllowEdit = true; if (colmn.Name.ToString().Contains("gvBtnAlawys")) { colmn.Visible = true; colmn.OptionsColumn.ReadOnly = false; } ; if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui")) { colmn.Visible = !isEdt; if (colmn.Visible == true) colmn.VisibleIndex = 99999; } else { if (isEdt == false) { if (colmn.Tag != null && colmn.Tag.ToString().EndsWith("edit")) colmn.OptionsColumn.ReadOnly = isEdt; else colmn.OptionsColumn.ReadOnly = !isEdt; } else colmn.OptionsColumn.ReadOnly = isEdt; } } } } var _btnAry = controls.Find("btnSelect", false); if (_btnAry.Length > 0) { var _btnType = _btnAry[0]; _btnType.Enabled = !isEdt; } var _btnAry2 = controls.Find("btnTui", false); if (_btnAry2.Length > 0) { var _btnType = _btnAry2[0]; _btnType.Enabled = !isEdt; } foreach (JProperty property in dynamicObject.Properties()) { var strName = property.Name; var strVal = property.Value.ToString(); try { var _dddddd = "txt_" + strName; var cols = controls.Find(_dddddd, true); if (cols.Length > 0) { var colType = cols[0]; if (colType is LookUpEdit) { var txt = colType as LookUpEdit; if (txt != null) txt.EditValue = strVal; txt.ReadOnly = isEdt; continue; } if (colType is ImageComboBoxEdit) { var txt = colType as ImageComboBoxEdit; for (var i = 0; i < txt.Properties.Items.Count; i++) { if (txt.Properties.Items[i].Description == strVal) { txt.ReadOnly = isEdt; txt.SelectedIndex = i; } } continue; } if (colType is ComboBoxEdit) { var txt = colType as ComboBoxEdit; if (txt.Properties.TextEditStyle == TextEditStyles.DisableTextEditor) try { txt.SelectedIndex = int.Parse(strVal); } catch (Exception) { txt.Text = strVal; } else txt.Text = strVal; txt.ReadOnly = isEdt; continue; } if (colType is ButtonEdit) { var txt = colType as ButtonEdit; if (txt != null) txt.Text = strVal; txt.Enabled = !isEdt; continue; } //文本 if (colType is TextEdit) { var txt = colType as TextEdit; if (txt != null) txt.Text = strVal; if (_isRead(txt.Tag)) { txt.ReadOnly = true; } else txt.ReadOnly = isEdt; continue; } //文本域 if (colType is MemoEdit) { var txt = colType as MemoEdit; if (txt != null) txt.Text = strVal; if (_isRead(txt.Tag)) { txt.ReadOnly = true; } else txt.ReadOnly = isEdt; continue; } //数字卡 if (colType is NumericUpDown) { var txt = colType as NumericUpDown; if (txt != null) txt.Text = strVal; txt.ReadOnly = isEdt; continue; } //单选 if (colType is CheckEdit) { var txt = colType as CheckEdit; if (_isRead(txt.Tag)) { txt.ReadOnly = true; } else txt.ReadOnly = isEdt; if (txt != null) { switch (strVal) { case "True": txt.Checked = true; break; case "1": txt.Checked = true; break; case "False": txt.Checked = false; break; default: txt.Checked = false; break; } } continue; } //单选 if (colType is CheckBox) { var txt = colType as CheckBox; if (txt != null) switch (strVal) { case "True": txt.Checked = true; break; case "1": txt.Checked = true; break; case "False": txt.Checked = false; break; default: txt.Checked = false; break; } txt.Enabled = !isEdt; continue; } //时间 if (colType is DateTimePicker) { var txt = colType as DateTimePicker; txt.Text = strVal; txt.Enabled = !isEdt; continue; } //Label if (colType is Label) { var txt = colType as Label; if (_dddddd == "txt_checkStatus") { if (strVal == "True" || strVal == "1") txt.Text = "已审核"; if (strVal == "False" || strVal == "0" || strVal == "") txt.Text = "未审核"; } else { txt.Text = strVal; } } //自定义仓库 if (colType is UcLookCk) { var txt = colType as UcLookCk; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定义供应商 if (colType is UcLookSupplier) { var txt = colType as UcLookSupplier; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定义物料 if (colType is UcLookItems) { var txt = colType as UcLookItems; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定车间 if (colType is UcLookWorkshop) { var txt = colType as UcLookWorkshop; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定产线 if (colType is UcLookWorkline) { var txt = colType as UcLookWorkline; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定单位 if (colType is UcLookUnit) { var txt = colType as UcLookUnit; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定客户 if (colType is UcLookCustomer) { var txt = colType as UcLookCustomer; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定员工 if (colType is UcLookStaff) { var txt = colType as UcLookStaff; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定组织 if (colType is UcLookOrg) { var txt = colType as UcLookOrg; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定用户 if (colType is UcLookUser) { var txt = colType as UcLookUser; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定打印机 if (colType is UcLookPrint) { var txt = colType as UcLookPrint; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定部门 if (colType is UcLookDepartment) { var txt = colType as UcLookDepartment; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定daa if (colType is UcLookDaa) { var txt = colType as UcLookDaa; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定委外 if (colType is UcLookWwgd) { var txt = colType as UcLookWwgd; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定销售 if (colType is UcLookSales) { var txt = colType as UcLookSales; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } if (colType is SimpleButton) { var txt = colType as SimpleButton; if (txt.Tag != null && txt.Tag.ToString() == "gvBtnAlawys") txt.Enabled = true; else txt.Enabled = !isEdt; continue; } //自定工序 if (colType is UcLookGx) { var txt = colType as UcLookGx; txt.SetIdOrCode(strVal); txt.IsReadly = isEdt; continue; } //自定不良 if (colType is UcDictionary) { var txt = colType as UcDictionary; txt.TextTxt = (strVal); txt.IsReadly = isEdt; continue; } //自定单据类型下拉 if (colType is UcDictionaryComBox) { var txt = colType as UcDictionaryComBox; txt.TextTxt = (strVal); txt.IsReadly = isEdt; continue; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } foreach (Control ctrl in controls) { if (ctrl is TextEdit) { var txt = ctrl as TextEdit; bool _bl = _isRead(txt.Tag, isEdt); txt.ReadOnly = _bl; // txt.ReadOnly = isEdt; continue; } } } /// /// 清空容器里面的控件 /// /// controls:为groupBox1.Controls/panel1.Controls /// 是否可编辑 /// 关联的grid public static void CleanValueByControl(ControlCollection controls, bool isEdt, List gridViews = null) { isEdt = !isEdt; if (gridViews != null) { foreach (var gv in gridViews) { gv.ClearSorting(); gv.OptionsCustomization.AllowSort = isEdt; foreach (GridColumn colmn in gv.Columns) { colmn.OptionsColumn.AllowEdit = true; if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui")) { colmn.Visible = !isEdt; } else { if (isEdt == false) { if (colmn.Tag != null && colmn.Tag.ToString().EndsWith("edit")) colmn.OptionsColumn.ReadOnly = isEdt; else colmn.OptionsColumn.ReadOnly = !isEdt; } else colmn.OptionsColumn.ReadOnly = isEdt; } } } } foreach (Control ctrl in controls) { //多行文本 if (ctrl is MemoEdit) { var txt = ctrl as MemoEdit; if (txt.Tag != null && txt.Tag.ToString().Length > 0 && txt.Tag.ToString().StartsWith("moren")) { txt.Text = txt.Tag.ToString().Replace("moren.", ""); } else txt.Text = ""; if (_isRead(txt.Tag)) { txt.ReadOnly = true; } else txt.ReadOnly = isEdt; continue; } //下拉 if (ctrl is ComboBoxEdit) { var txt = ctrl as ComboBoxEdit; if (txt.Properties.TextEditStyle == TextEditStyles.DisableTextEditor) txt.SelectedIndex = 0; else txt.Text = ""; txt.ReadOnly = isEdt; continue; } if (ctrl is ButtonEdit) { var txt = ctrl as ButtonEdit; txt.Text = ""; txt.Enabled = !isEdt; txt.ReadOnly = isEdt; continue; } //文本 if (ctrl is TextEdit) { var txt = ctrl as TextEdit; if (txt.Tag != null && txt.Tag.ToString().Length > 0 && txt.Tag.ToString().StartsWith("moren")) { txt.Text = txt.Tag.ToString().Replace("moren.", ""); } else txt.Text = ""; if (_isRead(txt.Tag)) { txt.ReadOnly = true; } else txt.ReadOnly = isEdt; continue; } //时间 if (ctrl is DateTimePicker) { var txt = ctrl as DateTimePicker; txt.Enabled = !isEdt; continue; } //单选 if (ctrl is CheckBox) { var txt = ctrl as CheckBox; txt.Enabled = !isEdt; txt.Checked = false; } if (ctrl is CheckEdit) { var txt = ctrl as CheckEdit; if (_isRead(txt.Tag)) { txt.ReadOnly = true; } else txt.ReadOnly = isEdt; continue; } //自定义仓库 if (ctrl is UcLookCk) { var txt = ctrl as UcLookCk; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定义供应商 if (ctrl is UcLookSupplier) { var txt = ctrl as UcLookSupplier; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定义物料 if (ctrl is UcLookItems) { var txt = ctrl as UcLookItems; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定车间 if (ctrl is UcLookWorkshop) { var txt = ctrl as UcLookWorkshop; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定产线 if (ctrl is UcLookWorkline) { var txt = ctrl as UcLookWorkline; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定单位 if (ctrl is UcLookUnit) { var txt = ctrl as UcLookUnit; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定客户 if (ctrl is UcLookCustomer) { var txt = ctrl as UcLookCustomer; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定员工 if (ctrl is UcLookStaff) { var txt = ctrl as UcLookStaff; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定组织 if (ctrl is UcLookOrg) { var txt = ctrl as UcLookOrg; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定用户 if (ctrl is UcLookUser) { var txt = ctrl as UcLookUser; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定打印机 if (ctrl is UcLookPrint) { var txt = ctrl as UcLookPrint; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定部门 if (ctrl is UcLookDepartment) { var txt = ctrl as UcLookDepartment; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定daa if (ctrl is UcLookDaa) { var txt = ctrl as UcLookDaa; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定委外 if (ctrl is UcLookWwgd) { var txt = ctrl as UcLookWwgd; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定销售 if (ctrl is UcLookSales) { var txt = ctrl as UcLookSales; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定工序 if (ctrl is UcLookGx) { var txt = ctrl as UcLookGx; txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } //自定不良 if (ctrl is UcDictionary) { var txt = ctrl as UcDictionary; txt.TextTxt = ""; txt.IsReadly = isEdt; continue; } //自定义单据类型下拉 if (ctrl is UcDictionaryComBox) { var txt = ctrl as UcDictionaryComBox; //txt.SetIdOrCode("-1"); txt.IsReadly = isEdt; continue; } if (ctrl is SimpleButton) { var txt = ctrl as SimpleButton; if (txt.Tag != null && txt.Tag.ToString() == "gvBtnAlawys") txt.Enabled = true; else txt.Enabled = !isEdt; continue; } } } /// /// 禁用或启用容器里面的控件 /// /// controls:为groupBox1.Controls/panel1.Controls /// /// public static void ChangeEnableByControl(ControlCollection controls, bool isEdt, List gridViews = null) { isEdt = !isEdt; if (gridViews != null) { foreach (var gv in gridViews) { gv.ClearSorting(); gv.OptionsCustomization.AllowSort = isEdt; foreach (GridColumn colmn in gv.Columns) { colmn.OptionsColumn.AllowEdit = true; if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui")) { colmn.Visible = !isEdt; } else { if (colmn.Tag != null && colmn.Tag.ToString().EndsWith("edit")) colmn.OptionsColumn.ReadOnly = isEdt; else colmn.OptionsColumn.ReadOnly = isEdt; } } } } foreach (Control ctrl in controls) { //下拉 if (ctrl is ComboBoxEdit) { var txt = ctrl as ComboBoxEdit; txt.ReadOnly = isEdt; continue; } if (ctrl is ButtonEdit) { var txt = ctrl as ButtonEdit; txt.Enabled = !isEdt; continue; } //文本 if (ctrl is TextEdit) { var txt = ctrl as TextEdit; if (_isRead(txt.Tag)) { txt.ReadOnly = true; } else txt.ReadOnly = isEdt; continue; } if (ctrl is MemoEdit) { var txt = ctrl as MemoEdit; if (_isRead(txt.Tag)) { txt.ReadOnly = true; } else txt.ReadOnly = isEdt; continue; } //数字卡 if (ctrl is NumericUpDown) { var txt = ctrl as NumericUpDown; txt.ReadOnly = isEdt; continue; } //日期 if (ctrl is DateTimePicker) { ctrl.Enabled = !isEdt; continue; } //单选 if (ctrl is CheckBox) { ctrl.Enabled = !isEdt; continue; } if (ctrl is CheckEdit) { var txt = ctrl as CheckEdit; txt.ReadOnly = isEdt; continue; } //自定义仓库 if (ctrl is UcLookCk) { var txt = ctrl as UcLookCk; txt.IsReadly = isEdt; continue; } //自定义供应商 if (ctrl is UcLookSupplier) { var txt = ctrl as UcLookSupplier; txt.IsReadly = isEdt; continue; } //自定义物料 if (ctrl is UcLookItems) { var txt = ctrl as UcLookItems; txt.IsReadly = isEdt; continue; } //自定义车间 if (ctrl is UcLookWorkshop) { var txt = ctrl as UcLookWorkshop; txt.IsReadly = isEdt; continue; } //自定义产线 if (ctrl is UcLookWorkline) { var txt = ctrl as UcLookWorkline; txt.IsReadly = isEdt; continue; } //自定义单位 if (ctrl is UcLookUnit) { var txt = ctrl as UcLookUnit; txt.IsReadly = isEdt; continue; } //自定义客户 if (ctrl is UcLookCustomer) { var txt = ctrl as UcLookCustomer; txt.IsReadly = isEdt; continue; } //自定义员工 if (ctrl is UcLookStaff) { var txt = ctrl as UcLookStaff; txt.IsReadly = isEdt; continue; } //自定组织 if (ctrl is UcLookOrg) { var txt = ctrl as UcLookOrg; txt.IsReadly = isEdt; continue; } //自定用户 if (ctrl is UcLookUser) { var txt = ctrl as UcLookUser; txt.IsReadly = isEdt; continue; } //自定打印 if (ctrl is UcLookPrint) { var txt = ctrl as UcLookPrint; txt.IsReadly = isEdt; continue; } //自定部门 if (ctrl is UcLookDepartment) { var txt = ctrl as UcLookDepartment; txt.IsReadly = isEdt; continue; } //自定daa if (ctrl is UcLookDaa) { var txt = ctrl as UcLookDaa; txt.IsReadly = isEdt; continue; } //自定委外 if (ctrl is UcLookWwgd) { var txt = ctrl as UcLookWwgd; txt.IsReadly = isEdt; continue; } //自定销售 if (ctrl is UcLookSales) { var txt = ctrl as UcLookSales; txt.IsReadly = isEdt; continue; } //自定工序 if (ctrl is UcLookGx) { var txt = ctrl as UcLookGx; txt.IsReadly = isEdt; continue; } //自定不良 if (ctrl is UcDictionary) { var txt = ctrl as UcDictionary; txt.IsReadly = isEdt; continue; } //自定单据类型下拉 if (ctrl is UcDictionaryComBox) { var txt = ctrl as UcDictionaryComBox; txt.IsReadly = isEdt; continue; } if (ctrl is SimpleButton) { var txt = ctrl as SimpleButton; if (txt.Tag != null && txt.Tag.ToString() == "gvBtnAlawys") txt.Enabled = true; else txt.Enabled = !isEdt; continue; } } } #endregion /// /// 判断控件只读状态 /// /// /// /// private static bool _isRead(object obj, bool isEdt = false) { ///永远是只读的 if (obj != null && obj.ToString().ToUpper() == ("readOnly".ToUpper())) { return true; } ///永远是可写的 if (obj != null && obj.ToString().ToUpper() == ("readOnly-1".ToUpper())) { return false; } return isEdt; } /// /// tab跳转:0查看,1退出,2删除,3修改,4新增加,6保存后 /// /// /// 0查看,1退出,2删除,3修改,4新增加,6保存后 public static void JumpTab(XtraTabControl tabControl, int action) { if (action == 0) { tabControl.TabPages[0].PageEnabled = true; tabControl.TabPages[1].PageEnabled = true; tabControl.SelectedTabPageIndex = 1; return; } if (action == 1) { tabControl.TabPages[0].PageEnabled = true; tabControl.TabPages[1].PageEnabled = true; tabControl.SelectedTabPageIndex = 0; return; } if (action == 2) { tabControl.TabPages[0].PageEnabled = true; tabControl.TabPages[1].PageEnabled = true; tabControl.SelectedTabPageIndex = 0; return; } if (action == 3) { tabControl.TabPages[0].PageEnabled = false; tabControl.TabPages[1].PageEnabled = true; tabControl.SelectedTabPageIndex = 1; return; } if (action == 4) { tabControl.TabPages[0].PageEnabled = false; tabControl.TabPages[1].PageEnabled = true; tabControl.SelectedTabPageIndex = 1; return; } if (action == 5) { tabControl.TabPages[0].PageEnabled = true; tabControl.TabPages[1].PageEnabled = true; tabControl.SelectedTabPageIndex = 1; return; } if (action == 6) { tabControl.TabPages[0].PageEnabled = true; tabControl.TabPages[1].PageEnabled = true; return; } } /// /// TreeView联动选择 /// /// public static void TreeViewCheck(TreeViewEventArgs e) { try { if (e.Node.Nodes.Count > 0) foreach (TreeNode tn in e.Node.Nodes) { tn.Checked = e.Node.Checked; foreach (TreeNode x in tn.Nodes) { x.Checked = e.Node.Checked; foreach (TreeNode y in x.Nodes) y.Checked = e.Node.Checked; } } if (e.Node.Checked && e.Node.Parent != null && e.Node.Parent.Nodes.Count > 0) { var currentNode = e.Node; while (currentNode != null) { currentNode.Checked = e.Node.Checked; currentNode = currentNode.Parent; } } } catch (Exception ex) { MsgHelper.ShowError(ex.Message); } } /// /// 转Guid /// /// /// public static Guid ToGuid(string str) { if (string.IsNullOrEmpty(str)) return Guid.Empty; return Guid.Parse(str); } public static decimal ToDecimal(string str) { try { return decimal.Parse(str); } catch (Exception) { return 0; } } public static decimal? GetDecimal(string s) { if (string.IsNullOrEmpty(s)) return null; return decimal.Parse(s); } public static int ToBit(string str) { if (str.ToUpper() == "true".ToUpper()) return 1; return 0; } public static bool ToCheck(string str) { if (str.ToUpper() == "true".ToUpper()) return true; if (str.ToUpper() == "1".ToUpper()) return true; return false; } /// /// 读取grid的当前行 /// /// /// 编辑框中的主键名 /// 编辑框中的文本框名 /// /// /// public static (string, string) GetCurrentRow( XtraTabControl xtraTabControl1 , Label lbGuid , TextEdit txtName , GridView gridView1 , string fileName = "" , int SelectedTabPageIndex = 1) { var _strGuid = ""; var _strName = ""; if (xtraTabControl1.SelectedTabPageIndex == SelectedTabPageIndex && lbGuid.Text.Length > 10) { _strGuid = lbGuid.Text.Trim(); _strName = txtName.Text.Trim(); } else { var dr = gridView1.GetFocusedDataRow(); if (dr == null || string.IsNullOrEmpty(dr["guid"].ToString())) { } else { _strGuid = dr["guid"].ToString(); if (string.IsNullOrEmpty(fileName)) _strName = dr[1].ToString(); else _strName = dr[fileName].ToString(); } } return (_strGuid, _strName); } /// /// 读取TreeView的当前行 /// /// /// /// /// /// /// public static (string, string) GetCurrentRow( XtraTabControl xtraTabControl1 , Label lbGuid , TextEdit txtName , TreeView tlMenu , int SelectedTabPageIndex = 1) { var _strGuid = ""; var _strName = ""; if (xtraTabControl1.SelectedTabPageIndex == SelectedTabPageIndex && lbGuid.Text.Length > 10) { _strGuid = lbGuid.Text.Trim(); _strName = txtName.Text.Trim(); } else { var clickedNode = tlMenu.SelectedNode; if (clickedNode != null) { _strGuid = clickedNode.Name; _strName = clickedNode.Text.Trim(); } } return (_strGuid, _strName); } /// /// 读取TreeList的当前行 /// /// /// /// /// /// /// public static (string, string) GetCurrentRow( XtraTabControl xtraTabControl1 , Label lbGuid , TextEdit txtName , TreeList tlMenu , int SelectedTabPageIndex = 1) { var _strGuid = ""; var _strName = ""; if (xtraTabControl1.SelectedTabPageIndex == SelectedTabPageIndex && lbGuid.Text.Length > 10) { _strGuid = lbGuid.Text.Trim(); _strName = txtName.Text.Trim(); } else { _strGuid = tlMenu.FocusedNode.GetValue("guid").ToString(); _strName = tlMenu.FocusedNode.GetValue(0).ToString(); } return (_strGuid, _strName); } /// /// 读取GridView双击的主键 /// /// /// /// /// public static string GetCurrentDoubleRow(GridView gridView1 , MouseEventArgs e , string colName) { var info = gridView1.CalcHitInfo(e.Location); if (info.InRow) { var view = info.View; if (view != null) { var row = view.GetDataRow(info.RowHandle); if (row != null) { var rowGuid = row[colName].ToString(); return rowGuid; } } } return ""; } /// /// 读取GridView双击的主键 /// /// /// /// /// public static string GetCurrentDoubleRow(TreeList tlMenu , MouseEventArgs e , string colName) { var info = tlMenu.CalcHitInfo(e.Location); if (info.Node != null) { var clickedNode = tlMenu.FocusedNode; if (clickedNode.FirstNode == null) { var rowGuid = clickedNode.GetValue(colName).ToString(); return rowGuid; } } return ""; } /// /// /// /// /// /// /// 对应的审核字段名称 /// public static void SetCheckIco(object s, PictureBox btnChkIco, Form fm, string fileName = "checkStatus", string icoName = "") { GridView dgv = s as GridView; if (dgv != null) { if (dgv.GetSelectedRows() != null && dgv.GetSelectedRows().Count() > 0) { var selectedRow = dgv.GetSelectedRows()[0]; // 获取第一个选中行的索引 if (selectedRow >= 0) { var checkStatus = dgv.GetRowCellValue(selectedRow, fileName).ToString(); // 获取指定列的值 btnChkIco.Text = checkStatus; btnChkIco.Visible = true; if (checkStatus == "1" || checkStatus.ToUpper() == true.ToString().ToUpper() || checkStatus == "已审核") { btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_check; btnChkIco.Tag = "已审核"; } else { btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_noCheck; btnChkIco.Tag = "未审核"; } btnChkIco.Anchor = AnchorStyles.Top | AnchorStyles.Right; // 靠右 btnChkIco.Location = new Point(fm.ClientSize.Width - btnChkIco.Width - 20, 25); // 距离顶部10像素 } } } } /// /// /// /// /// chk字段 /// chk user /// chk date /// /// 当前窗体 /// 1为审核,0为反审核 /// public static void SetCheckIco(GridView gridView1, string zdChk, string zdChkUser, string zdCkDate, PictureBox btnChkIco, Form fm, string fileName, string icoName = "") { btnChkIco.Anchor = AnchorStyles.Top | AnchorStyles.Right; // 靠右 btnChkIco.Location = new Point(fm.ClientSize.Width - btnChkIco.Width - 20, 80); // 距离顶部10像素 if (gridView1 == null) { btnChkIco.Visible = true; if (fileName == "1") { btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_check; btnChkIco.Tag = "已审核"; } else { btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_noCheck; btnChkIco.Tag = "未审核"; } return; } if (fileName == "1" || fileName.ToUpper() == true.ToString().ToUpper()) { btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_check; btnChkIco.Tag = "已审核"; if (!string.IsNullOrEmpty(zdChkUser)) gridView1.SetFocusedRowCellValue(zdChkUser, "已审核"); if (!string.IsNullOrEmpty(zdCkDate)) gridView1.SetFocusedRowCellValue(zdCkDate, DateTime.Now.ToString()); if (!string.IsNullOrEmpty(zdChk)) gridView1.SetFocusedRowCellValue(zdChk, true); } else { btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_noCheck; btnChkIco.Tag = "未审核"; if (!string.IsNullOrEmpty(zdChkUser)) gridView1.SetFocusedRowCellValue(zdChkUser, ""); if (!string.IsNullOrEmpty(zdCkDate)) gridView1.SetFocusedRowCellValue(zdCkDate, ""); if (!string.IsNullOrEmpty(zdChk)) gridView1.SetFocusedRowCellValue(zdChk, false); } } #region 设置搜索 public static FilterEntity getFilterEntityWord(string id, string idDec, string val, string type) { switch (type) { case "Bit类型": string _val = (val.ToUpper() == "true".ToUpper() ? "1" : "0"); return new FilterEntity(id, idDec + ")", "=", "等于)", "" + _val + "", type); break; default: return new FilterEntity(id, idDec + ")", "like", "包含)", "%" + val + "%", type); break; } } public static List GetDilter(GridColumnCollection Columns, GridView gridView1 = null) { List fiList = new List(); if (gridView1 != null) { bool b = gridView1.ActiveFilterEnabled; if (b == false) return fiList; } foreach (DevExpress.XtraGrid.Columns.GridColumn col in Columns) { ColumnFilterInfo filter = col.FilterInfo; if (string.IsNullOrEmpty(filter.FilterString)) continue; string _filterString = filter.FilterString.Replace("Contains", "").Replace("(", "").Replace(")", "").Replace("'", "").Replace("'", ""); string[] ddd = _filterString.Split(','); string _val = ""; if (ddd.Length > 1) { _val = ddd[1].Trim(); } else { ddd = _filterString.Split('='); _val = ddd[1].Trim(); } fiList.Add(getFilterEntityWord(col.Tag.ToString(), col.Caption.Trim(), _val, col.UnboundExpression)); } return fiList; } /// /// 根据过滤器,读取查询条件,org表为组织 /// /// /// public static string GetSearchWhere(List _filterList) { var _sbSqlWhere = new StringBuilder(); foreach (var itm in _filterList) { if (itm.fileId.ToUpper().Contains("org".ToUpper())) { if (IsNumeric(itm.fileValue.Replace("%", ""))) _sbSqlWhere.Append(" and org.FNumber " + itm.fileOper + "'" + itm.fileValue + "'"); else { _sbSqlWhere.Append(" and org.NAME " + itm.fileOper + "'" + itm.fileValue.Trim() + "'"); } } else { switch (itm.fileType) { case "时间类型": _sbSqlWhere.Append(" and CONVERT(nvarchar(30)," + itm.fileId + ",23)" + itm.fileOper + "'" + itm.fileValue + "'"); break; case "Bit类型": _sbSqlWhere.Append(" and isnull(" + itm.fileId + ",0) =" + itm.fileValue + ""); break; default: _sbSqlWhere.Append(" and " + itm.fileId + " " + itm.fileOper + " '" + itm.fileValue + "'"); break; } } } return _sbSqlWhere.ToString(); } public delegate void DelegateGetModel(string guid); public delegate void DelegateGetList(int currentPage); /// /// /// /// gridview /// 图标按钮 /// 窗体 /// 字段 /// 图标路径 /// 委托1 /// 鸟嘴提示 /// /// 委托2(列表显示明细) public static void SetGridViewParameter(GridView gridView1, PictureBox picCheckBox = null, Form fm = null, string fileName = "checkStatus", string icoName = "", DelegateGetModel action = null, DevExpress.Utils.ToolTipController tips = null, bool isPostSearch = true, DelegateGetModel action2 = null) { gridView1.PopupMenuShowing += (s, e) => { if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column) { GridViewColumnMenu menu = e.Menu as GridViewColumnMenu; if (menu != null) { string[] ary = { "Column Chooser", "Hide This Column", "Clear All Sorting", "Clear Sorting", "Sort Descending", "Sort Ascending", "Best Fit (all columns)" }; for (int i = menu.Items.Count - 1; i >= 0; i--) { string _caption = menu.Items[i].Caption; if (!ary.Contains(_caption)) { menu.Items.Remove(menu.Items[i]); } } } } }; gridView1.OptionsView.ColumnAutoWidth = false;//自动调整列宽 if (isPostSearch == true) { gridView1.OptionsView.ShowGroupPanel = false; gridView1.OptionsCustomization.AllowGroup = false; gridView1.OptionsFilter.AllowAutoFilterConditionChange = DevExpress.Utils.DefaultBoolean.False; gridView1.OptionsView.ShowAutoFilterRow = true; gridView1.OptionsFilter.AllowFilterEditor = false; gridView1.OptionsFilter.ShowCustomFunctions = DevExpress.Utils.DefaultBoolean.False; gridView1.OptionsFilter.AllowColumnMRUFilterList = false; gridView1.OptionsFilter.AllowMRUFilterList = false; gridView1.OptionsCustomization.AllowFilter = false; gridView1.OptionsFind.ShowSearchNavButtons = false; gridView1.OptionsView.ShowGroupPanel = false; //是否显示底部的过滤条 // gridView1.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never; } // gridView1.Appearance.HeaderPanel.ForeColor = DevExpress.LookAndFeel.DXSkinColors.ForeColors.ControlText; foreach (GridColumn column in gridView1.Columns) { column.MinWidth = 10; column.MaxWidth = 0; column.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near; column.OptionsColumn.AllowEdit = true; // column.OptionsFilter.AutoFilterCondition = AutoFilterCondition.Contains; column.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains; column.OptionsFilter.ImmediateUpdateAutoFilter = false; if (column.Tag == null || column.Tag.ToString().EndsWith("edit")) column.OptionsColumn.ReadOnly = false; else column.OptionsColumn.ReadOnly = true; //if(isPostSearch==false) // column.OptionsColumn.ReadOnly = true; if (isPostSearch == true) { if (column.Tag == null || column.Tag.ToString().Length <= 0) column.OptionsFilter.AllowAutoFilter = false; } } gridView1.IndicatorWidth = 60; gridView1.CustomDrawRowIndicator += (s, e) => { if (e.Info.IsRowIndicator && e.RowHandle >= 0) e.Info.DisplayText = (e.RowHandle + 1).ToString(); }; gridView1.CustomDrawEmptyForeground += (s, e) => { var str = "暂未查找到匹配的数据!"; var f = new Font("微软雅黑", 16); var r = new Rectangle(gridView1.GridControl.Width / 2 - 100, e.Bounds.Top + 45, e.Bounds.Right - 5, e.Bounds.Height - 5); e.Graphics.DrawString(str, f, Brushes.Gray, r); }; if (picCheckBox != null) { gridView1.FocusedRowChanged += (s, e) => { UtilityHelper.SetCheckIco(s, picCheckBox, fm, fileName, icoName); }; } if (action != null) { gridView1.ShownEditor += (sender, e) => { DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView; view.ActiveEditor.DoubleClick += (ssssss, eeeeeee) => { int _handle = gridView1.FocusedRowHandle; if (_handle == -1) return; DataRow row = gridView1.GetDataRow(_handle); if (row == null) return; string _guid = row["guid"].ToString(); if (string.IsNullOrEmpty(_guid)) return; action(_guid); }; if (view.ActiveEditor is TextEdit) view.ActiveEditor.MouseUp += ActiveEditor_MouseUp; }; } if (action2 != null) { gridView1.FocusedRowChanged += (s, e) => { int _handle = gridView1.FocusedRowHandle; if (_handle == -1) return; DataRow row = gridView1.GetDataRow(_handle); if (row == null) return; string _guid = row["guid"].ToString(); if (string.IsNullOrEmpty(_guid)) return; action2(_guid); }; } gridView1.RowStyle += (s, e) => { //默认选中行不变色 gridView1.OptionsSelection.EnableAppearanceFocusedRow = false; //默认选中单元格不变色 gridView1.OptionsSelection.EnableAppearanceFocusedCell = false; if (e.RowHandle >= 0) { DataRow row = gridView1.GetDataRow(e.RowHandle); if (row == null) return; //这是danger色 bool columnExists = row.Table.Columns.Contains("isRed"); if (columnExists == true) { string _isRed = row["isRed"].ToString(); if (_isRed == "1") { e.Appearance.ForeColor = Color.Tomato; } } //这是success色 columnExists = row.Table.Columns.Contains("isSuccess"); if (columnExists == true) { string _isRed = row["isSuccess"].ToString(); if (_isRed == "1") { e.Appearance.ForeColor = Color.FromArgb(128, 255, 128); } } // 设置焦点行的背景色 if (gridView1.GetRow(e.RowHandle) == gridView1.GetFocusedRow()) { e.Appearance.BackColor = Color.Azure; e.Appearance.BackColor2 = Color.LightSkyBlue; } //else if (gridView1.IsRowHotTracked(e.RowHandle)) //{ // // 设置鼠标悬停行的背景色 // e.Appearance.BackColor = Color.LightBlue; // e.Appearance.BackColor2 = Color.LightBlue; //} } }; if (tips != null) { tips.Appearance.BackColor = Color.LightBlue; // 设置背景颜色 tips.Appearance.ForeColor = Color.Black; // 设置前景色(文字颜色) gridView1.MouseMove += (s, e) => { try { GridHitInfo hi = gridView1.CalcHitInfo(new Point(e.X, e.Y)); if (hi.InRowCell) { int cuRowHandle = hi.RowHandle; if (cuRowHandle < 0) return; DataRow curRow = gridView1.GetDataRow(cuRowHandle); var column = hi.Column; string showTxt = curRow[column.FieldName].ToString(); ToolTipControllerShowEventArgs aa = new ToolTipControllerShowEventArgs(); aa.AllowHtmlText = DefaultBoolean.True; aa.Title = column.Caption; //HTML, 粗体 aa.ToolTip = showTxt; //断行 aa.ShowBeak = true; aa.Rounded = true; ////圆角 aa.RoundRadius = 7; //圆角率 // aa.ToolTipType = ToolTipType.SuperTip; //超级样式,可多行或显示图标 aa.ToolTipType = ToolTipType.Standard;//标准样式,可显示鸟嘴。 aa.IconType = ToolTipIconType.Information; //消息图标 aa.IconSize = ToolTipIconSize.Small; //大图标 tips.ShowHint(aa); } else tips.HideHint(); } catch (Exception exception) { } }; } } private static void ActiveEditor_MouseUp(object sender, MouseEventArgs e) { BaseEdit edit = sender as BaseEdit; edit.MouseUp -= ActiveEditor_MouseUp; edit.SelectAll(); } public static void SetGridLayout(GridView gridView1) { foreach (GridColumn column in gridView1.Columns) { if (column.Width > 500) column.Width = 500; } } /// /// 设置选项卡 /// /// /// /// /// /// public static void SetTabParameter(GridView gridView1, DevExpress.XtraTab.XtraTabControl xtraTabControl1, UcPageBar pageBar1, DelegateGetModel action = null, DelegateGetList page = null, Label lbGuid = null) { xtraTabControl1.SelectedPageChanged += (s, e) => { if (xtraTabControl1.SelectedTabPageIndex == 1) { int _handle = gridView1.FocusedRowHandle; bool _bl = xtraTabControl1.TabPages[0].PageEnabled; if (_bl == false) { return; } ; if (_handle < 0) { xtraTabControl1.SelectedTabPageIndex = -1; Gs.DevApp.ToolBox.MsgHelper.ShowInformation("请选择你要显示的行!" + _handle.ToString() + "tag" + xtraTabControl1.SelectedTabPageIndex.ToString()); return; } DataRow row = gridView1.GetDataRow(_handle); if (row == null) { xtraTabControl1.SelectedTabPageIndex = -1; Gs.DevApp.ToolBox.MsgHelper.ShowInformation("请选择你要显示的行!" + _handle.ToString()); return; } string _guid = row["guid"].ToString(); if (string.IsNullOrEmpty(_guid)) { xtraTabControl1.SelectedTabPageIndex = -1; Gs.DevApp.ToolBox.MsgHelper.ShowInformation("请选择你要显示的行!" + _handle.ToString()); return; } action(_guid); } if (pageBar1 != null && xtraTabControl1.SelectedTabPageIndex == 0) { page(pageBar1.CurrentPage); int rowHandle = 0; rowHandle = gridView1.LocateByValue(1, gridView1.Columns["guid"], lbGuid.Text); if (rowHandle < 0) rowHandle = 0; gridView1.FocusedRowHandle = rowHandle; } }; } /// /// 设置明细grid样式 /// /// /// /// /// /// public static void SetGridViewParameterMx(GridView gridView1, DevExpress.Utils.ToolTipController tips = null) { gridView1.PopupMenuShowing += (s, e) => { if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column) { GridViewColumnMenu menu = e.Menu as GridViewColumnMenu; if (menu != null) { string[] ary = { "Column Chooser", "Hide This Column", "Clear All Sorting", "Clear Sorting", "Sort Descending", "Sort Ascending", "Best Fit (all columns)" }; for (int i = menu.Items.Count - 1; i >= 0; i--) { string _caption = menu.Items[i].Caption; if (!ary.Contains(_caption)) { menu.Items.Remove(menu.Items[i]); } } } } }; gridView1.OptionsView.ShowGroupPanel = false; gridView1.OptionsCustomization.AllowGroup = false; // gridView1.OptionsView.Alignment = DataGridViewContentAlignment.MiddleLeft; foreach (GridColumn column in gridView1.Columns) { // column.DefaultCellStyle.Alignment = true; column.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near; column.MinWidth = 10; column.MaxWidth = 0; } gridView1.OptionsView.ColumnAutoWidth = false;//自动调整列宽 gridView1.OptionsFilter.AllowFilterEditor = false; gridView1.OptionsFilter.ShowCustomFunctions = DevExpress.Utils.DefaultBoolean.False; gridView1.OptionsCustomization.AllowFilter = false; gridView1.OptionsFind.ShowSearchNavButtons = false; gridView1.OptionsView.ShowAutoFilterRow = false; gridView1.OptionsView.ShowGroupPanel = false; gridView1.IndicatorWidth = 60; gridView1.CustomDrawRowIndicator += (s, e) => { if (e.Info.IsRowIndicator && e.RowHandle >= 0) e.Info.DisplayText = (e.RowHandle + 1).ToString(); }; gridView1.CustomDrawEmptyForeground += (s, e) => { var str = "暂无明细数据!"; var f = new Font("微软雅黑", 16); var r = new Rectangle(gridView1.GridControl.Width / 2 - 100, e.Bounds.Top + 45, e.Bounds.Right - 5, e.Bounds.Height - 5); e.Graphics.DrawString(str, f, Brushes.Gray, r); }; gridView1.ValidatingEditor += (sender, e) => { //yz_quantity_0 GridView view = sender as GridView; if (view.FocusedColumn.Tag != null && view.FocusedColumn.Tag.ToString().StartsWith("yz_")) { string[] _ary = view.FocusedColumn.Tag.ToString().Split('_'); if (_ary.Length > 2) { if (_ary[2] == "0") { double price = 0; if (!Double.TryParse(e.Value as String, out price)) { e.Valid = false; e.ErrorText = "请输入正确的数字."; } return; } } } }; if (tips != null) { tips.Appearance.BackColor = Color.LightBlue; // 设置背景颜色 tips.Appearance.ForeColor = Color.Black; // 设置前景色(文字颜色) gridView1.MouseMove += (s, e) => { try { GridHitInfo hi = gridView1.CalcHitInfo(new Point(e.X, e.Y)); if (hi.InRowCell) { int cuRowHandle = hi.RowHandle; if (cuRowHandle < 0) return; DataRow curRow = gridView1.GetDataRow(cuRowHandle); var column = hi.Column; string showTxt = curRow[column.FieldName].ToString(); ToolTipControllerShowEventArgs aa = new ToolTipControllerShowEventArgs(); aa.AllowHtmlText = DefaultBoolean.True; aa.Title = column.Caption; //HTML, 粗体 aa.ToolTip = showTxt; //断行 aa.ShowBeak = true; aa.Rounded = true; ////圆角 aa.RoundRadius = 7; //圆角率 // aa.ToolTipType = ToolTipType.SuperTip; //超级样式,可多行或显示图标 aa.ToolTipType = ToolTipType.Standard;//标准样式,可显示鸟嘴。 aa.IconType = ToolTipIconType.Information; //消息图标 aa.IconSize = ToolTipIconSize.Small; //大图标 tips.ShowHint(aa); } else tips.HideHint(); } catch (Exception exception) { } }; } } #endregion /// /// 判断是不是一个有效的数值 /// /// /// public static bool IsNumeric(string str) { Regex regex = new Regex("^[0-9]+$"); return regex.IsMatch(str); } /// /// 判断是不是一个有效果的decimal数值 /// /// /// public static bool IsNumeric2(string str) { string input = str; decimal number; bool isNumeric = decimal.TryParse(input, out number); return isNumeric; } /// /// 判断是不是一个有效的正整数 /// /// /// public static bool IsNumeric3(string str) { string input = str; decimal number; bool isNumeric = decimal.TryParse(input, out number); if (isNumeric && number > 0) return true; return false; } /// /// 判断是不是一个有效的正整数 /// /// /// public static bool IsNumeric3(string str, string str2) { decimal d1 = 0; decimal d2 = 0; if (!string.IsNullOrEmpty(str)) { d1 = decimal.Parse(str); } if (!string.IsNullOrEmpty(str2)) { d2 = decimal.Parse(str2); } return (d1 + d2) > 0 ? true : false; } /// /// /// /// txt_psnQty_1:每张条码数量 /// txt_iCount_1:整张数值 /// txt_kQty:可打印量 /// /// txt_yuliang:余量 public static void PrintJiSuan(DevExpress.XtraEditors.TextEdit box1, DevExpress.XtraEditors.TextEdit box2, string sum, DevExpress.XtraEditors.RadioGroup rd, DevExpress.XtraEditors.TextEdit txt_yuliang = null) { if (rd.SelectedIndex == 2) return; try { string t1 = box1.Text.Trim(); string t2 = box2.Text.Trim(); if (!Gs.DevApp.ToolBox.UtilityHelper.IsNumeric2(t1)) return; if (Gs.DevApp.ToolBox.UtilityHelper.ToDecimal(t1) <= 0) return; decimal? dc = Gs.DevApp.ToolBox.UtilityHelper.GetDecimal(sum); decimal? dc1 = Gs.DevApp.ToolBox.UtilityHelper.GetDecimal(t1); decimal dividend = decimal.Parse(sum); // 被除数 decimal divisor = decimal.Parse(t1); // 除数 decimal shang = dividend / divisor; decimal integerPart = Math.Truncate(shang); // 获取整数部分 decimal decimalPart = dividend - divisor * integerPart; // 获取小数部分 //decimal quotient = dividend / divisor; // 整数部分 //decimal remainder = dividend % divisor; // 余数 box2.Text = integerPart.ToString(); if (rd.SelectedIndex == 0) txt_yuliang.Text = decimalPart.ToString(); } catch (Exception ex) { Gs.DevApp.ToolBox.MsgHelper.ShowError("输入数据错误:" + ex.Message); } } public static void PrintAuto(DevExpress.XtraEditors.TextEdit txt_psnQty_1, DevExpress.XtraEditors.TextEdit txt_iCount_1, DevExpress.XtraEditors.RadioGroup radOut, DevExpress.XtraEditors.TextEdit txt_yuliang = null) { txt_psnQty_1.Text = ""; txt_iCount_1.Text = ""; txt_yuliang.Text = ""; if (radOut.SelectedIndex == 2) txt_iCount_1.ReadOnly = false; else txt_iCount_1.ReadOnly = true; } #region 自定义进度条列 /// /// 自定义进度条列 /// /// /// 列的字段名 /// /// /// public static void CustomProgressBarColumn(DevExpress.XtraGrid.Views.Grid.GridView view, string fieldName, int warningValue = 50, Brush lessColor = null, Brush greaterColor = null) { var col = view.Columns[fieldName]; if (col == null) return; col.AppearanceCell.Options.UseTextOptions = true; col.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center; view.CustomDrawCell += (s, e) => { int _handle = e.RowHandle; if (_handle < 0) return; if (e.Column.FieldName == fieldName) { DrawProgressBar(e, warningValue, lessColor, greaterColor); e.Handled = true; DrawEditor(e); } }; } private static void DrawProgressBar(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e, int warningValue = 50, Brush lessColor = null, Brush greaterColor = null) { string d = e.CellValue == null ? null : e.CellValue.ToString(); decimal percent = string.IsNullOrEmpty(d) ? 0m : decimal.Parse(d); if (percent <= 0) percent = 0.1m; int width = (int)(percent * e.Bounds.Width); Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, width, e.Bounds.Height); Brush b = Brushes.Green; if (greaterColor != null) { b = greaterColor; } if (percent * 100 < warningValue) { if (lessColor == null) { b = Brushes.Red; } else { b = lessColor; } } e.Graphics.FillRectangle(b, rect); } private static void DrawEditor(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { GridCellInfo cell = e.Cell as GridCellInfo; Point offset = cell.CellValueRect.Location; BaseEditPainter pb = cell.ViewInfo.Painter as BaseEditPainter; AppearanceObject style = cell.ViewInfo.PaintAppearance; if (!offset.IsEmpty) cell.ViewInfo.Offset(offset.X, offset.Y); try { pb.Draw(new ControlGraphicsInfoArgs(cell.ViewInfo, e.Cache, cell.Bounds)); } finally { if (!offset.IsEmpty) { cell.ViewInfo.Offset(-offset.X, -offset.Y); } } } #endregion #region 绘制表头全选勾选框 /// /// 绘制表头全选勾选框 /// // private Rectangle checkBoxColumnHeaderRect = Rectangle.Empty; // private GridColumn checkBoxColumn = null; public static void CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e) { Rectangle checkBoxColumnHeaderRect = new Rectangle(51, 1, 37, 57); if (e.Column != null && e.Column.AbsoluteIndex == 0) { //X = 51 Y = 1 Width = 37 Height = 57 e.Column.Caption = "."; checkBoxColumnHeaderRect = e.Bounds; // checkBoxColumn = e.Column; //须把列头标题设置为空 e.Painter.DrawObject(e.Info); //在列头中心显示复选框 int x = e.Bounds.X + (int)((e.Bounds.Width - CheckBoxRenderer.GetGlyphSize(e.Graphics, CheckBoxState.UncheckedNormal).Width) * 0.5); int y = e.Bounds.Y + (int)((e.Bounds.Height - CheckBoxRenderer.GetGlyphSize(e.Graphics, CheckBoxState.UncheckedNormal).Height) * 0.5); Point location = new Point(x, y); CheckBoxState checkBoxState; if (e.Column.Tag != null && e.Column.Tag.ToString() == "1") checkBoxState = CheckBoxState.CheckedPressed; else checkBoxState = CheckBoxState.UncheckedNormal; CheckBoxRenderer.DrawCheckBox(e.Graphics, location, checkBoxState); e.Handled = true; } } /// /// gridview 全选,取消全选 /// /// /// /// /// public static void CustomMouseUp(object sender, MouseEventArgs e, DevExpress.XtraGrid.GridControl gcMain, DevExpress.XtraGrid.Views.Grid.GridView gridView1) { GridColumn checkBoxColumn = gridView1.Columns[0]; Rectangle checkBoxColumnHeaderRect = new Rectangle(51, 1, 37, 57); if (checkBoxColumnHeaderRect != Rectangle.Empty) { if (e.X > checkBoxColumnHeaderRect.X && e.X < (checkBoxColumnHeaderRect.X + checkBoxColumnHeaderRect.Width) && e.Y > checkBoxColumnHeaderRect.Y && e.Y < (checkBoxColumnHeaderRect.Y + checkBoxColumnHeaderRect.Height)) { DataTable _Table = (DataTable)gcMain.DataSource; if (checkBoxColumn.Tag != null && checkBoxColumn.Tag.ToString() == "1") { checkBoxColumn.Tag = "0"; foreach (DataRow row in _Table.Rows) { row["chkInt"] = false; } } else { checkBoxColumn.Tag = "1"; /********2025-07-23修补过滤bug 故注释 beg ************/ //foreach (DataRow row in _Table.Rows) //{ // row["chkInt"] = true; //} /********2025-07-23修补过滤bug 故注释 end ************/ /********2025-07-23修补过滤bug beg ************/ System.Collections.IList ftRow = gridView1.DataController.GetAllFilteredAndSortedRows(); System.Collections.ArrayList ftAry = new System.Collections.ArrayList(); foreach (System.Data.DataRowView _ft in ftRow) { string guid = _ft["guid"].ToString(); ftAry.Add(guid); } foreach (DataRow row in _Table.Rows) { if (ftAry.Contains(row["guid"].ToString())) row["chkInt"] = true; } /********2025-07-23修补过滤bug end ************/ } gcMain.BindingContext = new BindingContext(); gcMain.DataSource = _Table; gcMain.ForceInitialize(); gridView1.CloseEditor(); gridView1.PostEditor(); gridView1.UpdateCurrentRow(); gridView1.InvalidateColumnHeader(checkBoxColumn); } } } #endregion //读取默认组织 public static string GetFirstOrg(UserControl.UcLookOrg txt_erpSczz) { string userGuid = LoginInfoModel.CurrentUser.LoginUserGuid; var pgq = new PageQueryModel(1, 999999, "FID", "asc", userGuid, " and IS_STATUS=1"); var json = JsonConvert.SerializeObject(pgq); try { var strReturn = UtilityHelper.HttpPost("", "Organization/GetListPage", json); var _obj = UtilityHelper.ReturnToDynamic(strReturn); string _extendText = _obj.rtnData.extendText; string[] _dftOrg = _extendText.Split(','); if (_dftOrg.Length > 0) { txt_erpSczz.SetIdOrCode(_dftOrg[0].Trim()); return _dftOrg[0].Trim(); } return ""; } catch (Exception ex) { return ""; } } #region GridView汇总配置工具方法 /// /// 2025-08-14 kyy 快速配置GridView底部汇总(启用汇总行+设置列求和汇总) /// /// 目标GridView控件 /// 需要进行求和汇总的列名数组 public static void SetupGridSummary(DevExpress.XtraGrid.Views.Grid.GridView gridView, params string[] summaryColumns) { // 启用底部汇总行 gridView.OptionsView.ShowFooter = true; // 为每个指定列设置求和汇总 foreach (var columnName in summaryColumns) { // 验证列是否存在(避免异常) if (gridView.Columns[columnName] != null) { gridView.Columns[columnName].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum; gridView.Columns[columnName].SummaryItem.DisplayFormat = "合计: {0}"; } } } /// /// 2025-08-15 kyy 快速配置GridView条件汇总(只汇总满足条件的行) /// 使用简单的标签显示方式,避免复杂的汇总项配置 /// /// 目标GridView控件 /// 条件字段名(如chkInt) /// 条件值(如true、1等表示选中) /// 需要进行求和汇总的列名数组 public static void SetupGridSummaryWithCondition(DevExpress.XtraGrid.Views.Grid.GridView gridView, string conditionFieldName, object conditionValue, params string[] summaryColumns) { // 启用底部汇总行 gridView.OptionsView.ShowFooter = true; // 存储条件汇总配置到GridView的Tag中 var conditionSummaryConfig = new { ConditionField = conditionFieldName, ConditionValue = conditionValue, SummaryColumns = summaryColumns }; // 将配置存储到GridView的Tag中(如果已有其他Tag,需要合并) if (gridView.Tag == null) { gridView.Tag = conditionSummaryConfig; } else { // 如果已有Tag,创建一个复合对象 gridView.Tag = new { Existing = gridView.Tag, ConditionSummary = conditionSummaryConfig }; } // 为每个指定列设置自定义汇总计算 foreach (var columnName in summaryColumns) { if (gridView.Columns[columnName] != null) { // 使用标准的求和汇总,但显示自定义格式 gridView.Columns[columnName].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum; gridView.Columns[columnName].SummaryItem.DisplayFormat = "选中合计: {0}"; } } // 绑定数据变化事件,手动计算条件汇总 gridView.CustomDrawFooterCell -= GridView_CustomDrawFooterForCondition; gridView.CustomDrawFooterCell += GridView_CustomDrawFooterForCondition; } /// /// 自定义绘制页脚单元格,显示条件汇总结果 /// private static void GridView_CustomDrawFooterForCondition(object sender, DevExpress.XtraGrid.Views.Grid.FooterCellCustomDrawEventArgs e) { var gridView = sender as DevExpress.XtraGrid.Views.Grid.GridView; if (gridView?.Tag == null) return; try { // 获取条件汇总配置 dynamic config = GetConditionSummaryConfig(gridView.Tag); if (config == null) return; string conditionField = config.ConditionField; object conditionValue = config.ConditionValue; string[] summaryColumns = config.SummaryColumns; // 检查当前列是否需要条件汇总 if (summaryColumns != null && Array.IndexOf(summaryColumns, e.Column.FieldName) >= 0) { // 计算条件汇总值 decimal totalValue = CalculateConditionalSum(gridView, conditionField, conditionValue, e.Column.FieldName); // 设置显示文本 e.Info.DisplayText = $"{totalValue:F2}"; // 可以自定义显示样式 e.Appearance.ForeColor = System.Drawing.Color.Blue; e.Appearance.Font = new System.Drawing.Font(e.Appearance.Font, System.Drawing.FontStyle.Bold); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"条件汇总绘制错误: {ex.Message}"); } } /// /// 获取条件汇总配置 /// private static dynamic GetConditionSummaryConfig(object tag) { if (tag == null) return null; // 检查是否是直接的配置对象 var tagType = tag.GetType(); if (tagType.GetProperty("ConditionField") != null) { return tag; } // 检查是否是复合对象 if (tagType.GetProperty("ConditionSummary") != null) { dynamic composite = tag; return composite.ConditionSummary; } return null; } /// /// 计算条件汇总值 /// private static decimal CalculateConditionalSum(DevExpress.XtraGrid.Views.Grid.GridView gridView, string conditionField, object conditionValue, string summaryField) { decimal total = 0; try { // 遍历所有可见行 for (int i = 0; i < gridView.DataRowCount; i++) { // 获取条件字段值 object conditionFieldValue = gridView.GetRowCellValue(i, conditionField); // 检查条件是否匹配 if (IsConditionMatched(conditionFieldValue, conditionValue)) { // 获取汇总字段值 object summaryFieldValue = gridView.GetRowCellValue(i, summaryField); // 累加数值 if (summaryFieldValue != null && decimal.TryParse(summaryFieldValue.ToString(), out decimal value)) { total += value; } } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"条件汇总计算错误: {ex.Message}"); } return Math.Round(total, 2); } /// /// 手动刷新条件汇总显示 - 优化版本,立即生效 /// public static void RefreshConditionalSummary(DevExpress.XtraGrid.Views.Grid.GridView gridView) { try { if (gridView != null) { // 先刷新数据绑定 gridView.PostEditor(); gridView.UpdateCurrentRow(); // 强制重绘底部汇总区域 gridView.InvalidateFooter(); // 立即刷新布局 gridView.LayoutChanged(); // 强制重绘整个视图 gridView.Invalidate(); // 确保界面立即更新 System.Windows.Forms.Application.DoEvents(); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"刷新条件汇总错误: {ex.Message}"); } } /// /// 判断条件是否匹配(用于汇总) /// private static bool IsConditionMatched(object fieldValue, object targetValue) { if (fieldValue == null && targetValue == null) return true; if (fieldValue == null || targetValue == null) return false; string fieldStr = fieldValue.ToString().Trim(); string targetStr = targetValue.ToString().Trim(); // 处理布尔值类型的匹配 if (IsBooleanValue(fieldStr) || IsBooleanValue(targetStr)) { bool fieldBool = ConvertToBoolean(fieldStr); bool targetBool = ConvertToBoolean(targetStr); return fieldBool == targetBool; } // 处理数值类型的匹配 if (decimal.TryParse(fieldStr, out decimal fieldNum) && decimal.TryParse(targetStr, out decimal targetNum)) { return fieldNum == targetNum; } // 字符串匹配 return string.Equals(fieldStr, targetStr, StringComparison.OrdinalIgnoreCase); } /// /// 检查是否为布尔值 /// private static bool IsBooleanValue(string value) { if (string.IsNullOrEmpty(value)) return false; string lower = value.ToLower(); return lower == "true" || lower == "false" || lower == "1" || lower == "0"; } /// /// 转换为布尔值 /// private static bool ConvertToBoolean(string value) { if (string.IsNullOrEmpty(value)) return false; string lower = value.ToLower(); return lower == "true" || lower == "1"; } #endregion #region 简化版GridView颜色设置方法 - 创建时间:2024年8月15日 制作人:kyy /// /// 一行代码设置GridView颜色的方法 /// 创建时间:2024年8月15日 制作人:kyy /// 使用示例: /// SetSimpleGridColor(gridView1, "checkStatus", "=1", "Cell", Color.Blue); /// SetSimpleGridColor(gridView1, "jyjg", "contains合格", "Cell", Color.Green); /// SetSimpleGridColor(gridView1, "status", "=已审核", "Row", Color.Blue); /// SetSimpleGridColor(gridView1, "", "quantity-okRkqty>100", "Row", Color.Red); // 字段运算表达式 /// /// GridView控件 /// 字段名(运算表达式时可为空字符串) /// 条件(支持: =1, contains合格, >5, >=10, 或字段运算如 fieldA+fieldB>100) /// 范围(Cell/单元格, Row/行, Column/列) /// 颜色 public static void SetSimpleGridColor(GridView gridView, string fieldName, string condition, string scope, Color color) { if (gridView == null || string.IsNullOrEmpty(condition)) return; // 检查是否为运算表达式 bool isCalculationExpression = IsCalculationExpression(condition); // 如果是运算表达式但没有指定fieldName,fieldName设为空 if (isCalculationExpression && string.IsNullOrEmpty(fieldName)) { fieldName = ""; // 运算表达式不需要特定字段名 } else if (!isCalculationExpression && string.IsNullOrEmpty(fieldName)) { return; // 普通条件必须指定字段名 } // 移除之前可能绑定的事件(避免重复绑定) gridView.RowCellStyle -= SimpleGridColor_RowCellStyle; // 创建简单的颜色配置并存储到Tag var colorConfigs = gridView.Tag as List ?? new List(); // 添加新配置 colorConfigs.Add(new SimpleColorConfig { FieldName = fieldName, Condition = condition, Scope = scope, Color = color }); gridView.Tag = colorConfigs; // 绑定颜色设置事件 gridView.RowCellStyle += SimpleGridColor_RowCellStyle; } /// /// 简单颜色配置类 /// private class SimpleColorConfig { public string FieldName { get; set; } public string Condition { get; set; } public string Scope { get; set; } public Color Color { get; set; } } /// /// 简化的颜色设置事件处理 /// private static void SimpleGridColor_RowCellStyle(object sender, RowCellStyleEventArgs e) { var gridView = sender as GridView; if (gridView?.Tag is List configs) { foreach (var config in configs) { // 判断是否应该应用颜色 bool shouldApply = false; // 检查是否为运算表达式 bool isCalculationExpression = IsCalculationExpression(config.Condition); if (isCalculationExpression) { // 运算表达式根据范围决定是否应用 if (config.Scope.ToLower() == "row") shouldApply = true; // 整行应用 else if (config.Scope.ToLower() == "cell") shouldApply = true; // 所有单元格都尝试应用 else if (config.Scope.ToLower() == "column") shouldApply = true; // 所有列都尝试应用 } else { // 普通字段条件 if (config.Scope.ToLower() == "cell" && e.Column.FieldName == config.FieldName) shouldApply = true; else if (config.Scope.ToLower() == "row") shouldApply = true; else if (config.Scope.ToLower() == "column" && e.Column.FieldName == config.FieldName) shouldApply = true; } if (!shouldApply) continue; bool conditionMatched = false; if (isCalculationExpression) { // 处理字段运算表达式 try { decimal result = EvaluateExpression(gridView, e.RowHandle, config.Condition); conditionMatched = result == 1; // 1表示条件满足,0表示不满足 if (conditionMatched) { System.Diagnostics.Debug.WriteLine($"运算表达式匹配成功 - 表达式: {config.Condition}, 行: {e.RowHandle}"); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"运算表达式计算失败 - 表达式: {config.Condition}, 错误: {ex.Message}"); } } else { // 处理单字段条件 object cellValue = gridView.GetRowCellValue(e.RowHandle, config.FieldName); if (cellValue != null) { string stringValue = cellValue.ToString().Trim(); // 调试信息:输出实际的字段值 if (config.FieldName == "checkStatus" && e.RowHandle < 3) // 只输出前几行避免太多日志 { System.Diagnostics.Debug.WriteLine($"字段值调试 - 字段: {config.FieldName}, 实际值: '{stringValue}', 类型: {cellValue.GetType().Name}, 条件: {config.Condition}"); } // 判断条件是否匹配 conditionMatched = IsConditionMatch(stringValue, config.Condition); } } if (conditionMatched) { e.Appearance.ForeColor = config.Color; System.Diagnostics.Debug.WriteLine($"颜色匹配成功 - 字段/表达式: {config.FieldName ?? config.Condition}, 条件: {config.Condition}"); break; // 匹配到第一个条件就停止 } } } } /// /// 检查是否为计算表达式(包含字段运算) /// private static bool IsCalculationExpression(string condition) { if (string.IsNullOrEmpty(condition)) return false; // 检查是否包含数学运算符和比较运算符的组合 char[] mathOperators = { '+', '-', '*', '/' }; string[] comparisonOperators = { ">=", "<=", ">", "<", "=", "!=" }; bool hasMathOperator = condition.IndexOfAny(mathOperators) >= 0; bool hasComparisonOperator = comparisonOperators.Any(op => condition.Contains(op)); // 如果同时包含数学运算符和比较运算符,就认为是计算表达式 return hasMathOperator && hasComparisonOperator; } /// /// 判断条件是否匹配 /// private static bool IsConditionMatch(string value, string condition) { if (string.IsNullOrEmpty(value) || string.IsNullOrEmpty(condition)) return false; condition = condition.Trim(); value = value.Trim(); // 处理contains条件 if (condition.StartsWith("contains", StringComparison.OrdinalIgnoreCase)) { string matchText = condition.Substring(8).Trim(); // 移除前缀处理(如"M:免检"中的"M:") string processedValue = value; int colonIndex = processedValue.IndexOf(':'); if (colonIndex >= 0 && colonIndex < processedValue.Length - 1) { processedValue = processedValue.Substring(colonIndex + 1).Trim(); } return processedValue.IndexOf(matchText, StringComparison.OrdinalIgnoreCase) >= 0; } // 处理等于条件 if (condition.StartsWith("=")) { string targetValue = condition.Substring(1).Trim(); // 特殊处理bit类型字段(Boolean值) if (IsBooleanCondition(targetValue)) { return IsBooleanMatch(value, targetValue); } return string.Equals(value, targetValue, StringComparison.OrdinalIgnoreCase); } // 处理数值比较条件 if (decimal.TryParse(value, out decimal numericValue)) { if (condition.StartsWith(">=")) { if (decimal.TryParse(condition.Substring(2).Trim(), out decimal target)) return numericValue >= target; } else if (condition.StartsWith("<=")) { if (decimal.TryParse(condition.Substring(2).Trim(), out decimal target)) return numericValue <= target; } else if (condition.StartsWith(">")) { if (decimal.TryParse(condition.Substring(1).Trim(), out decimal target)) return numericValue > target; } else if (condition.StartsWith("<")) { if (decimal.TryParse(condition.Substring(1).Trim(), out decimal target)) return numericValue < target; } else if (decimal.TryParse(condition, out decimal target)) { return numericValue == target; } } // 检查是否是布尔值条件 if (IsBooleanCondition(condition)) { return IsBooleanMatch(value, condition); } // 默认按字符串相等处理 return string.Equals(value, condition, StringComparison.OrdinalIgnoreCase); } /// /// 判断多字段运算条件是否匹配(支持字段间运算) /// private static bool IsConditionMatchWithCalculation(GridView gridView, int rowHandle, string condition) { if (string.IsNullOrEmpty(condition)) return false; condition = condition.Trim(); try { // 解析并计算表达式 decimal calculatedValue = EvaluateExpression(gridView, rowHandle, condition); // 如果表达式计算成功,返回true(表示条件满足) return true; } catch { // 如果计算失败,返回false return false; } } /// /// 计算包含字段名的表达式 /// 支持格式:fieldA+fieldB>100, fieldA-fieldB<=50, fieldA*fieldB>=fieldC等 /// private static decimal EvaluateExpression(GridView gridView, int rowHandle, string expression) { // 提取比较运算符和目标值 string[] operators = { ">=", "<=", ">", "<", "=", "!=" }; string op = ""; string leftExpression = ""; string rightExpression = ""; foreach (var oper in operators) { if (expression.Contains(oper)) { string[] parts = expression.Split(new string[] { oper }, StringSplitOptions.None); if (parts.Length == 2) { op = oper; leftExpression = parts[0].Trim(); rightExpression = parts[1].Trim(); break; } } } if (string.IsNullOrEmpty(op)) throw new ArgumentException("无效的表达式格式"); // 计算左侧表达式的值 decimal leftValue = CalculateFieldExpression(gridView, rowHandle, leftExpression); // 计算右侧表达式的值(可能是数字或字段表达式) decimal rightValue; if (decimal.TryParse(rightExpression, out rightValue)) { // 右侧是数字 } else { // 右侧是字段表达式 rightValue = CalculateFieldExpression(gridView, rowHandle, rightExpression); } // 根据运算符判断条件是否满足 switch (op) { case ">=": return leftValue >= rightValue ? 1 : 0; case "<=": return leftValue <= rightValue ? 1 : 0; case ">": return leftValue > rightValue ? 1 : 0; case "<": return leftValue < rightValue ? 1 : 0; case "=": return leftValue == rightValue ? 1 : 0; case "!=": return leftValue != rightValue ? 1 : 0; default: throw new ArgumentException($"不支持的运算符: {op}"); } } /// /// 计算包含字段运算的表达式(如:fieldA+fieldB-fieldC*2) /// private static decimal CalculateFieldExpression(GridView gridView, int rowHandle, string expression) { expression = expression.Trim(); // 简单的表达式解析器 - 按运算优先级处理 // 先处理乘除,再处理加减 // 分割加减运算 var addSubTerms = SplitExpression(expression, new[] { '+', '-' }); decimal result = 0; char lastOp = '+'; foreach (var term in addSubTerms) { string cleanTerm = term.Key.Trim(); char op = term.Value; // 处理乘除运算 decimal termValue = CalculateMultiplyDivide(gridView, rowHandle, cleanTerm); if (lastOp == '+') result += termValue; else if (lastOp == '-') result -= termValue; lastOp = op; } return result; } /// /// 处理乘除运算 /// private static decimal CalculateMultiplyDivide(GridView gridView, int rowHandle, string expression) { var mulDivTerms = SplitExpression(expression, new[] { '*', '/' }); decimal result = 0; char lastOp = '*'; bool isFirst = true; foreach (var term in mulDivTerms) { string cleanTerm = term.Key.Trim(); char op = term.Value; decimal termValue = GetFieldOrNumericValue(gridView, rowHandle, cleanTerm); if (isFirst) { result = termValue; isFirst = false; } else if (lastOp == '*') result *= termValue; else if (lastOp == '/') result /= termValue; lastOp = op; } return result; } /// /// 分割表达式 /// private static List> SplitExpression(string expression, char[] operators) { var result = new List>(); string currentTerm = ""; for (int i = 0; i < expression.Length; i++) { char c = expression[i]; if (operators.Contains(c)) { if (!string.IsNullOrEmpty(currentTerm)) { result.Add(new KeyValuePair(currentTerm, i < expression.Length - 1 ? c : '\0')); currentTerm = ""; } } else { currentTerm += c; } } if (!string.IsNullOrEmpty(currentTerm)) { result.Add(new KeyValuePair(currentTerm, '\0')); } return result; } /// /// 获取字段值或数值 /// private static decimal GetFieldOrNumericValue(GridView gridView, int rowHandle, string valueExpression) { valueExpression = valueExpression.Trim(); // 尝试解析为数字 if (decimal.TryParse(valueExpression, out decimal numValue)) { return numValue; } // 作为字段名处理 try { object cellValue = gridView.GetRowCellValue(rowHandle, valueExpression); if (cellValue != null && decimal.TryParse(cellValue.ToString(), out decimal fieldValue)) { return fieldValue; } } catch { // 字段不存在或无法转换为数字 } return 0; // 默认值 } /// /// 检查是否是布尔值条件 /// private static bool IsBooleanCondition(string condition) { string lowerCondition = condition.ToLower(); return lowerCondition == "true" || lowerCondition == "false" || lowerCondition == "1" || lowerCondition == "0"; } /// /// 布尔值匹配检查 /// private static bool IsBooleanMatch(string value, string condition) { // 标准化布尔值 bool conditionBool = NormalizeBooleanValue(condition); bool valueBool = NormalizeBooleanValue(value); return conditionBool == valueBool; } /// /// 标准化布尔值 /// private static bool NormalizeBooleanValue(string value) { if (string.IsNullOrEmpty(value)) return false; string lowerValue = value.Trim().ToLower(); // 处理各种可能的true值 if (lowerValue == "true" || lowerValue == "1" || lowerValue == "是" || lowerValue == "已审核") return true; // 处理各种可能的false值 if (lowerValue == "false" || lowerValue == "0" || lowerValue == "否" || lowerValue == "未审核" || lowerValue == "") return false; // 默认为false return false; } /// /// 设置GridView复选框列点击时自动刷新条件汇总 /// 2025-08-15 kyy 新增公用方法 /// /// 目标GridView控件 /// 复选框字段名(默认为chkInt) /// 延迟刷新时间(毫秒,默认100ms) public static void SetupCheckboxClickRefresh(DevExpress.XtraGrid.Views.Grid.GridView gridView, string checkboxFieldName = "chkInt", int delayMs = 100) { if (gridView == null) return; // 添加鼠标点击事件,检测复选框列点击 gridView.MouseDown += (s, e) => { var hitInfo = gridView.CalcHitInfo(e.Location); if (hitInfo.InRowCell && hitInfo.Column?.FieldName == checkboxFieldName) { // 复选框列被点击,延迟刷新汇总确保值已更新 System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); timer.Interval = delayMs; timer.Tick += (sender, args) => { timer.Stop(); timer.Dispose(); RefreshConditionalSummary(gridView); }; timer.Start(); } }; } /// /// 一键设置GridView条件汇总的完整功能(包含条件汇总+实时刷新) /// 2025-08-15 kyy 新增便捷方法 /// /// 目标GridView控件 /// 条件字段名(如chkInt) /// 条件值(如true表示选中) /// 需要汇总的列名数组 /// 是否启用实时刷新(默认true) /// 刷新延迟时间(毫秒,默认100ms) public static void SetupCompleteConditionalSummary(DevExpress.XtraGrid.Views.Grid.GridView gridView, string conditionFieldName, object conditionValue, string[] summaryColumns, bool enableRealTimeRefresh = true, int refreshDelayMs = 100) { if (gridView == null || summaryColumns == null || summaryColumns.Length == 0) return; // 1. 设置条件汇总 SetupGridSummaryWithCondition(gridView, conditionFieldName, conditionValue, summaryColumns); if (!enableRealTimeRefresh) return; // 2. 设置实时刷新事件 // 单元格值变化事件 gridView.CellValueChanged += (s, e) => { if (e.Column.FieldName == conditionFieldName) { RefreshConditionalSummary(gridView); } }; // 数据源变化事件 gridView.DataSourceChanged += (s, e) => { RefreshConditionalSummary(gridView); }; // 编辑器隐藏事件 gridView.HiddenEditor += (s, e) => { System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); timer.Interval = 50; timer.Tick += (sender, args) => { timer.Stop(); timer.Dispose(); RefreshConditionalSummary(gridView); }; timer.Start(); }; // 3. 设置复选框点击刷新 SetupCheckboxClickRefresh(gridView, conditionFieldName, refreshDelayMs); } #endregion } /// /// 下拉框条目类 /// public class CboItemEntity { public CboItemEntity() { } public CboItemEntity(string val, string text, string fType = "") { Text = text; Value = val; FType = fType; } /// /// 显示值 /// public object Text { get; set; } = 0; /// /// 对象值 /// public object Value { get; set; } = ""; public object FType { get; set; } = ""; public override string ToString() { return Text.ToString(); } } /// /// 查询框 /// public class FilterEntity { /// /// /// 字段名 /// 字段名备注 /// 操作符 /// 操作符备注 /// public FilterEntity(string id, string idDec, string oper, string operDec, string val, string type) { fileId = id; fileIdDec = idDec; fileOper = oper; fileOperDec = operDec; fileValue = val; fileType = type; } public string fileId { get; set; } public string fileIdDec { get; set; } public string fileOper { get; set; } public string fileOperDec { get; set; } public string fileValue { get; set; } public string fileType { get; set; } } public enum QcSeason { iqc, ipqc巡检, ipqc首检, fqc, 生产退料入库检, 其它入库检 } }